Ruby on rails 如何使用ActiveRecord使一个表中的两列指向另一个表中的同一列?

Ruby on rails 如何使用ActiveRecord使一个表中的两列指向另一个表中的同一列?,ruby-on-rails,ruby,activerecord,associations,multiple-tables,Ruby On Rails,Ruby,Activerecord,Associations,Multiple Tables,我在这里冒着从手掌到额头的风险,但我不太明白如何使用Rails的ActiveRecord sugar实现这一点 我有一个tickets表,该表有两列(submitter\u id和assignment\u id),每一列都应该引用users表中不同的用户(特别是users表中的id列)。我希望能够使用ActiveRecord的关联来做一些事情,如ticket.submitter.name和ticket.assignment.email。提交者和受让人只是不同关联名称下的用户对象 我发现唯一接近我

我在这里冒着从手掌到额头的风险,但我不太明白如何使用Rails的ActiveRecord sugar实现这一点

我有一个
tickets
表,该表有两列(
submitter\u id
assignment\u id
),每一列都应该引用
users
表中不同的用户(特别是
users
表中的
id
列)。我希望能够使用ActiveRecord的关联来做一些事情,如
ticket.submitter.name
ticket.assignment.email
。提交者和受让人只是不同关联名称下的用户对象

我发现唯一接近我所做的事情是使用多态关联,但最终我相当确定这不是我真正需要的。我不会有多种类型,提交者和受让人都是用户,很可能是两个不同的用户


任何帮助都会很棒。谢谢

这样的方法应该行得通

class Ticket < ActiveRecord::Base
  belongs_to :submitter, :class_name => 'User', :foreign_key => 'submitter_id'
  belongs_to :assignee,  :class_name => 'User', :foreign_key => 'assignee_id'
end

class User < ActiveRecord::Base
  has_many :tickets, :class_name => 'Ticket', :foreign_key => 'submitter_id'
  has_many :tickets_assigned,  :class_name => 'Ticket', :foreign_key => 'assignee_id'
end
classticket'User',:foreign\u key=>'submitter\u id'
属于:受让人,:class\u name=>'User',:foreign\u key=>'assignee\u id'
结束
类用户'Ticket',:foreign\u key=>'submitter\u id'
是否分配了多张:票证,:class\u name=>'Ticket',:foreign\u key=>'assignment\u id'
结束
是的,PreciousBodyFluids是正确的,我们不需要在Ticket类中指定外键,因为rails可以从列名推断它,即提交者id和受让人id

但是,如果您的关联名称与列{id}不同,则必须指定它,即用户类大小写

classticketclass Ticket < ActiveRecord::Base
  belongs_to :submitter, :class_name => "User"
  belongs_to :assignee, :class_name => "User"
end
属于提交者:class\u name=>“用户” 属于:受让人,类别名称=>“用户” 结束 应该有用

编辑:如果不尝试,我不确定是否需要:foreign_key参数。我的直觉不是,但它不会伤害我

再次编辑:对不起,取消了用户->票证关联。您没有提到使用它们,如果我不打算在另一个方向上使用它们,我通常只会在一个方向上添加关联

无论如何,请尝试:

class User < ActiveRecord::Base
  has_many :assigned_tickets, :class_name => "Ticket", :foreign_key => "assignee_id"
  has_many :submitted_tickets, :class_name => "Ticket", :foreign_key => "submitter_id"
end
class用户“票证”;:foreign\u key=>“受让人\u id”
有多张:已提交的票证,:class\u name=>“票证”;:foreign\u key=>“提交者id”
结束

如果外键可以从关联名称派生出来,则在归属声明中不需要外键。你是对的,这就是为什么我在回复中也提到了外键:)绝对是一个非常重要的时刻。我知道它就在那里,但我想我无法访问那一点内存。谢谢你在这里帮助我!