我冒着手掌到额头的风险,但我无法弄清楚如何使用Rails的ActiveRecord糖来做到这一点。
我有一个tickets
表,其中有两列(submitter_id
和assignee_id
),每个列都应该引用users
表中的不同用户(特别是{{1} } id
表中的列。我希望能够使用ActiveRecord的关联来执行users
和ticket.submitter.name
之类的操作。提交者和受让人只是不同关联名称下的用户对象。
我发现的唯一与我正在做的事情接近的是使用多态关联,但最后我很确定它并不是我真正需要的。我不会有多种类型,提交者和受让人都是用户,很可能是两个不同的用户。
任何帮助都会很棒。谢谢!
答案 0 :(得分:15)
class Ticket < ActiveRecord::Base
belongs_to :submitter, :class_name => "User"
belongs_to :assignee, :class_name => "User"
end
应该工作。
编辑:没有尝试,我不确定你是否需要:foreign_key参数。我的直觉不是,但它不会受到伤害。
再次编辑:抱歉,离开了用户 - &gt;票务协会。你没有提到使用它们,如果我不打算在另一个方向上使用它们,我通常只会在一个方向上添加关联。
无论如何,试试:
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
答案 1 :(得分:6)
这样的事情应该有效
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
是的,PreciousBodilyFluids是对的,我们不需要在Ticket类中指定foreign_key,因为rails可以从列名中推断出它,即submitter_id和assignee_id
但是如果您的关联名称与column_name_ {id}不同,那么您必须指定它,即User类案例