まず第一に、私の経験から、外部キーを名前として使用して関連付けを行うことは一般的に悪い考えです。特にフィクスチャを記述する場合、レールは実際の値「created_by」を設定するか、created_by 関連付けのモデルを設定するかで混乱するようです。私のモデルでは、通常、あなたが説明するケースにこれらの関連付けを使用します。
belongs_to :creator, :class_name => "User", :foreign_key => 'created_by'
belongs_to :modifier, :class_name => "User", :foreign_key => 'modified_by'
必要に応じて、代わりに「creating_user」などの関連付け名を使用できます。関連付け名として created_by が本当に必要な場合は、関連付け名と等しくない限り、created_by_id または外部キーと同様のものを使用する必要があります。
次に、貼り付けたコードに少し混乱しています。あなたの選択「Deal has_one User」と「User belongs_to Deal」は、users テーブルに、Deal Id を含む created_by 列と modified_by 列 (外部キー) があることを意味します。基本的に、ユーザーは単一の取引によって作成されることを意味しますか? ただし、取引はユーザーによって作成されるべきであり、その逆ではないようです。deal.created_by.email の例は、関連付けではまったく機能しません。取引には「created_by」と呼ばれる関連付けがなく、「user」のみであり、そのうちの 1 つのモデルで同じ名前の関連付けが 2 つあるためです。そもそも全然効かない。
パトリックが提案したものと同様に関連付けを修正します。
class Deal < ActiveRecord::Base
belongs_to :creator, :class_name => "User", :foreign_key => "created_by"
belongs_to :modifier, :class_name => "User", :foreign_key =>"modified_by"
end
class User < ActiveRecord::Base
has_many :created_deals, :class_name => "Deal", :foreign_key => "created_by"
has_many :modified_deals, :class_name => "Deal", :foreign_key => "modified_by"
end