在 Rails 5.1 之後的版本,belongs_to 關聯的 model 預設改成必填了,也就是一定要有。透過 optional => true 可以允許 event 沒有 category 的情況。
class Event < ApplicationRecord
belongs_to :category, :optional => true
end
如果你是從舊版 Rails 升級上來,可以在 config/application.rb 中加入 Rails.application.config.active_record.belongs_to_required_by_default = false 改回舊版的預設行為。
class_name
可以變更關聯的類別名稱,例如:
class Event < ApplicationRecord
belongs_to :manager, :class_name => "User" # 預設的外部鍵叫做 manager_id
end
foreign_key
可以變更Foreign Key的欄位名稱,例如改成user_id :
class Event < ApplicationRecord
belongs_to :manager, :class_name => "User", :foreign_key => "user_id"
end
touch
這會在修改時,也順道修改關聯資料的updated_at時間:
class Attendee < ApplicationRecord
belongs_to :event, :touch => true
end
counter_cache
針對關聯作計數的快取,假設Event身上有attendees_count這個欄位,那麼:
class Attendee < ApplicationRecord
belongs_to :event, :counter_cache => true
end
這樣ActiveRecord就會自動更新attendees_count的數字。
[Rails 實戰聖經] https://ihower.tw/rails/activerecord-relationships.html