如何在 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
我有两个模型
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