Rails:在多对多关联中添加信息

时间:2012-07-29 12:09:09

标签: ruby-on-rails associations one-to-many

我在用户和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的工作?谢谢!

2 个答案:

答案 0 :(得分:1)

每次在rotazations表格中新建一行时,都会将user_id添加到creator_id,这是Rotazation上的一个属性。

但是,rotazations表是user_idrota_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

当我遇到类似的问题时,这个已经接受的答案帮助了我。