我对Ruby和Rails都不熟悉,但我现在已经通过书本学习了这两个东西(显然这意味着什么都不算,哈哈)。
我有两个模型,Event和User,它们是通过一个名为EventUser的表进行关联的。
class User < ActiveRecord::Base
has_many :event_users
has_many :events, :through => :event_users
end
class EventUser < ActiveRecord::Base
belongs_to :event
belongs_to :user
#For clarity's sake, EventUser also has a boolean column "active", among others
end
class Event < ActiveRecord::Base
has_many :event_users
has_many :users, :through => :event_users
end
这个项目是一个日历,在其中我需要跟踪人们报名和取消报名某个事件。我认为多对多是一个不错的方法,但我不能做出这样的事情:
u = User.find :first
active_events = u.events.find_by_active(true)
因为事件本身并没有那些额外的数据,这些额外的数据在EventUser模型中。尽管我可以这样做:
u = User.find :first
active_events = []
u.event_users.find_by_active(true).do |eu|
active_events << eu.event
end
这似乎与“Rails之道”相矛盾。 有人能给我指点一下吗?这件事困扰了我很长时间,今晚(今天早上)。