我有这两个模型:团队和用户。
每个用户都可以拥有团队,每个团队都有很多用户。但我想和team.members一起打电话给team.users。我设法使用class_name执行此操作,但我还需要访问Team by User。换句话说,user.team应该返回用户所在的团队。这就是我想出来的......
我的模型如下:
class Team < ActiveRecord::Base
has_many :members, foreign_key: 'id', class_name: 'User', :inverse_of => :team
end
class User < ActiveRecord::Base
belongs_to :team, :inverse_of => :user
end
(我尝试过:inverse_of =&gt;:也是用户模型中的成员。)
答案 0 :(得分:1)
你有:inverse_of
权利,至少在你使用:inverse_of => :members
时。这里的问题是外键。 foreign_key
指定另一个表中键列的名称,因此在您的情况下在user-table中。如果仅指定id
,则将使用用户的ID。只需将其指定为默认值,即不指定外键,然后将其设置为team_id
。
class Team < ActiveRecord::Base
has_many :members, :class_name => 'User', :inverse_of => :team
end
class User < ActiveRecord::Base
belongs_to :team, :inverse_of => :members
end
尽量不要将ruby 1.8(:key => 'value'
)中的hash-syntax与ruby 1.9(key: 'value'
)中的新语法混合使用。