iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

Ruby on Rails JS系列 第 5

Rails belong_to

belongs_to 的設定

optional

在 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


上一篇
Rails has_many
下一篇
Rails 如何新增 Migration 檔案
系列文
Ruby on Rails JS29

尚未有邦友留言

立即登入留言