8

私はここで手のひらから額への危険を冒していますが、Rails の ActiveRecord シュガーでこれを行う方法がよくわかりません。

tickets2 つの列 (submitter_idおよび) を持つテーブルがあり、それぞれがテーブル (具体的にはテーブル内の列)assignee_idから別のユーザーを参照する必要があります。ActiveRecord のアソシエーションを使用したり、使用したりできるようにしたいと考えています。送信者と担当者は、異なる連想名の下にある単なるユーザー オブジェクトです。usersidusersticket.submitter.nameticket.assignee.email

私がやっていることに近いことがわかった唯一のことは、ポリモーフィックな関連付けを使用することですが、最終的には、それが本当に必要なものではないことを確信しています。複数のタイプを用意するつもりはありません。提出者と担当者の両方がユーザーになり、2 人の異なるユーザーになる可能性も十分にあります。

どんな助けでも素晴らしいでしょう。ありがとう!

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

はい、PreciousBodylyFluids は正しいです。Rails は列名、つまり submitter_id と assignee_id から推測できるため、Ticket クラスでforeign_key を指定する必要はありません。

ただし、関連付け名が column_name_{id} と異なる場合は、それを指定する必要があります。つまり、 User クラスの場合

于 2009-12-10T06:51:42.890 に答える