在我的Rails應用程序中,我有事件和用戶模型。業務規則規定一個事件擁有一個所有者和許多成員,並且所有者必須是成員。反過來,用戶會擁有許多「擁有的事件」和「事件」(他/她是其成員但不是所有者的事件)。我原本打算這個關聯模型像這樣:如何使用has_many:通過關聯建模所有者和成員?
class Event < ActiveRecord::Base
has_many :event_members, dependent: :destroy
has_one :owner, through: :event_members, source: :user, conditions: { owner: true }
has_many :members, through: :event_members, source: :user
end
class EventMember < ActiveRecord::Base
belongs_to :event
belongs_to :user
end
class User < ActiveRecord::Base
has_many :owned_events, through: :event_members, conditions: { owner: true }
has_many :events, through: :event_members
end
我認爲這將確保一個業主和業主將被列入會員協會免費。但是,這不起作用,因爲我無法通過集合指定has_one - event_members關聯。
有沒有更好的方法來建模?我可以在Event上添加一個臨時「所有者」屬性,該屬性通過所有者標誌查詢EventMember,但是這將用於設置所有者(即,我是否可以獲取已創建的EventMember記錄並確保所有者標誌已設置)?
它看起來像我要從事件模型手動強制所有權如何。我研究了這兩個解決方案:[Association Extensions](http://reefpoints.dockyard.com/ruby/2012/04/03/use-association-extensions-to-build-join-attributes-ona-a- hmt.html)和[Association Guist](https://gist.github.com/sj26/2310315) - 後者讓我非常接近我想要的,但是在訪問':through'屬性時我看到了奇怪的行爲。我認爲你的回答需要一個'after_create'鉤子,以防事件未被保存在'make_owner!'中 – ppilone