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

时间:2015-05-27 00:01:07

标签: ruby-on-rails rails-activerecord rails-models

我有两个型号

class User 
   has_many :disputes
end

class Dispute
   belongs_to :user
end

所以争议有:user_id,但我的问题是,争议有两方 - 申诉人和被起诉人,都是用户。

我尝试通过创建两列来解决此问题::claimant_id:indicted_id,并传递@dispute.claimant_id = current_user.id之类的参数,但之后我不能使用{{{}之类的关系技巧1}}或@dispute.user.name与我的:@user.disputesclaimant_id

有没有办法在一个模型中设置两个:user_id(如索赔人和被起诉者),仍然维持争议和用户模型之间的关系?

2 个答案:

答案 0 :(得分:1)

您可以在:claimant_id牌桌上找到:indicted_idusers的路线,但在您的班级中您需要

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

答案 1 :(得分:0)

我认为这是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

我认为应该做对了。

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