如何在 rails 的一个模型中设置两个 user_id 列?

how to setup two user_id columns in one model in rails?

我有两个模型

class User 
   has_many :disputes
end

class Dispute
   belongs_to :user
end

因此争议有 :user_id,但我的问题是争议有两个方面 - 原告方和被起诉方,两者都是用户。

我试图通过创建两列来解决这个问题::claimant_id:indicted_id,并传递像 @dispute.claimant_id = current_user.id 这样的参数,但在那之后我不能使用像这样的关系技巧@dispute.user.name@user.disputes 与我的 :claimant_id:indicted_id.

有什么方法可以在一个模型中设置两个 :user_id(如索赔人和被起诉人)并仍然保持争议和用户模型之间的关系?

我认为这是 Ruby on Rails Double Association

的副本

对于你的情况,使用 class_name 作为你的 belongs_to 函数的第二个参数和一个带有 foreign_key 和 id 列名的散列(正如@devkaoru 所指出的),比如所以:

class Dispute < ActiveRecord::Base
  belongs_to :claimant, class_name: 'User', :foreign_key => :claimant_id
  belongs_to :indicted, class_name: 'User', :foreign_key => :indicted_id
end

我认为这应该是对的。

免责声明:这是一个未经测试的解决方案

您可以在 users table 上使用 :claimant_id:indicted_id,但在 class def 中您需要

class Dispute < ActiveRecord::Base
  belongs_to :claimant, class_name: 'User', :foreign_key => :claimant_id
  belongs_to :indicted, class_name: 'User', :foreign_key => :indicted_id
end

参考:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to