8

我在这里冒着手掌到额头的风险,但我不太清楚如何使用 Rails 的 ActiveRecord 糖来做到这一点。

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

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

任何帮助都会很棒。谢谢!

4

2 回答 2

17
class Ticket < ActiveRecord::Base
  belongs_to :submitter, :class_name => "User"
  belongs_to :assignee, :class_name => "User"
end

应该管用。

编辑:如果不尝试,我不确定您是否需要 :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
于 2009-12-10T06:52:10.863 回答
7

像这样的东西应该工作

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 类案例

于 2009-12-10T06:51:42.890 回答