如何在单个模型中有两个单独的外键,它们以相同的方式与同一个其他模型相关联?

时间:2011-05-19 05:28:46

标签: ruby-on-rails ruby-on-rails-3

我在位置模型中有两列应该与用户模型相关联('created_by'列和'updated_by'列)。

我的“地点展示”视图的相关部分目前看起来像这样:

<p>
    Created on <%= @location.created_at %> by <%= @location.created_by %><br />
    Last updated on <%= @location.updated_at %> by <%= @location.updated_by %>
</p>

...这显然只是给了我分别放入'created_by'和'updated_by'的ID。

我尝试了以下关联:

class Location < ActiveRecord::Base
    belongs_to :user, :foreign_key => "created_by"
    belongs_to :user, :foreign_key => "updated_by"
end

...在我看来这个:

<p>
    Created on <%= @location.created_at %> by <%= @location.user.name %><br />
    Last updated on <%= @location.updated_at %> by <%= @location.user.name %>
</p>

...但是这只会在地址中出现“NoMethodError#show - undefined method`name'为nil:NilClass”

(*奇怪的是,如果'created_by'和'updated_by'用户恰好相同*,它会在两个地方显示正确的用户名称。)

如何在一个模型中有两个单独的外键,它们以相同的方式与同一个模型相关联?

2 个答案:

答案 0 :(得分:2)

试试这个

class Location < ActiveRecord::Base
    belongs_to :user_created,:class_name=>"User", :foreign_key => "created_by"
    belongs_to :user_updated,:class_name=>"User", :foreign_key => "updated_by"
end

并申请

@location.user_created.name and @location.user_updated.name

答案 1 :(得分:0)

如果您使用@ location.updated_by.name和@ location.created_by.name,该怎么办?