首先,根据我的经验,使用外键作为名称的关联通常是一个坏主意。特别是在编写固定装置时,似乎 rails 会在设置实际值“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”意味着用户表将具有包含交易ID的created_by和modified_by(外键)列,基本上意味着用户是由单个交易创建的?然而,似乎交易应该由用户创建,而不是相反。您的 deal.created_by.email 示例根本无法与您的关联一起使用,因为交易不会有一个名为“created_by”的关联,只有“用户”,其中您在一个模型中有两个同名的关联,可以一开始根本不起作用。
修复类似于 Patrick 建议的关联:
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