我是Rails的新手,所以请耐心等待。
我有3个模型:User,Section和Tick。
每个部分都是由用户创建的。我猜这个联想:
class Section < ActiveRecord::Base
has_one :user
end
接下来,每个用户都可以“勾选”一个部分 - 只有一次。因此,对于每个tick,我有一个section_id,user_id和timestamps。这就是我被困的地方。这是否需要“has_one:through”关联?如果是这样,哪个方向?如果没有,那我就走了。
哪个协会在这里工作?
谢谢!
答案 0 :(得分:1)
class User < AR::Base
has_many :ticks
has_many :sections, :through => :ticks
end
class Section < AR::Base
has_many :ticks
has_many :users, :through => :ticks
end
class Tick < AR::Base
belongs_to :user
belongs_to :section
validates_uniqueness_of :user_id, :scope => :section_id
end
现在,要查找用户勾选的部分,请执行user.sections
,或查找勾选某个部分的所有用户section.users
这里有一个多对多关系(用户可以有很多部分,一个部分可以属于许多用户),因此这需要一个连接模型来关联它们。在这种情况下,Tick模型充当连接模型。
答案 1 :(得分:1)
这应该是对的:
class User < AR::Base
has_many :sections #user can have many sections
has_many :ticks, :through => :sections #user has many ticks, but the left outer join goes through sections
end
class Section < AR::Base
belongs_to :user #each section belongs to 1 user
has_many :ticks #each section can have a tick, because of can use has_many
end
class Tick < AR::Base
belongs_to :section #a tick belongs to a section
has_one :user, :through => :sections #belongs_to :through does not exist, use has_one through
end
答案 2 :(得分:0)
尝试以下
class Tick < ActiveRecord::Base
belongs_to :user
belongs_to :section
validates_uniqueness_of :user_id, :scope => :section_id #There is only one user per section
end
参考This