我在用户和rotas之间建立了多对多关联。我也试图存储特定罗塔的创造者是谁。
班级用户
has_many :rotazations
has_many :rotas, :through => :rotazations
Class Rota
has_many :rotazations
has_many :users, :through => :rotazations, :order => 'name ASC'
班级轮换
belongs_to :user
belongs_to :rota
before_create do |rotazation|
rotazation.creator_id = rotazation.user_id
end
创建rota时,我已成功设置rotazation表中的creator_id,以获得创建rota的用户的id。我的问题是,我如何访问它:
rota.creator
我的尝试
我试图添加以下内容:
罗塔班
...
belongs_to :creator, :class_name => "User", :through => :rotazations, :foreign_key => "creator_id"
...
用户类
has_many :created_rotas, :class_name=> "Rota", :through => :rotazations, :foreign_key => "creator_id"
然而,这不起作用。任何想法如何实现rota.creator的工作?谢谢!
答案 0 :(得分:1)
每次在rotazations
表格中新建一行时,都会将user_id
添加到creator_id
,这是Rotazation
上的一个属性。
但是,rotazations
表是user_id
和rota_id
的组合,只是为了解决多对多关系。如果我认为正确,creator_id
将始终与user_id
相同。所以,你实际上有冗余的数据:
| user_id | rota_id |creator_id |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 1 | 2 | 1 |
| ... | ... | ... |
为了知道谁创建了新的Rota
,您可以向rotas
表添加新属性,请说creator
。
创建新的rota时,可以将user_id
保存到此新属性中:
@rota = Rota.new
@rota.creator = current_user.id
答案 1 :(得分:1)
查看这些帖子:Many-To-Many relationship
当我遇到类似的问题时,这个已经接受的答案帮助了我。