0

我已经在用户和轮班之间建立了多对多的关联。我还试图存储特定轮换表的创建者是谁。

类用户

  has_many :rotazations
  has_many :rotas, :through => :rotazations

轮值班

  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

创建轮播表时,我已成功将轮播表中的 creator_id 设置为具有创建轮播表的用户的 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 工作?谢谢!

4

1 回答 1

1

每次您在rotazations表中创建新行时,您都会将 添加user_idcreator_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
于 2012-07-29T13:21:43.657 回答