在父视图中显示子值

时间:2011-01-24 11:09:46

标签: ruby-on-rails

我真的遇到了一个问题,我认为这是一个相对容易的问题,并且可能很容易纠正我可能做错的事情。

我有一个Person模型和一个Department模型。

关系是Person has_one:department,Department are_to:person

在我看来,当我循环收集人的属性时,我希望能够访问部门名称。我将department_id作为Person表中的外键,因此我可以看到每个人员部门的有效ID,但是如何指出此ID以检索部门名称。

<% @people.each do |p| %>
    <%= p.name %>
    <%= p.tel_num %>
    <%= p.department_id %>   <- i want this to somehow display the name of department
<% end %>

我尝试过各种各样的事情,p.department.name,p.department_id.name

没有运气!!

非常令人沮丧,因为我知道这是一个非常容易的问题。

任何帮助都非常感激。


更新

当然是我的代码:

部门模特:

Class Department < ActiveRecord::Base
    has_one :person
end

人物模型:

Class Person < ActiveRecord::BAse
    belongs_to :department
end

显示人物视图:

<% @people.each do |p| %>
<p>Name: <%= "#{p.name}" %> </p>
<p>Start Date: <%= "#{p.start_date}" %> </p>
<p>Current Department: <%= "#{p.department_id}" %> <- displays relevant id
<% end %>

person_department_id返回为2,与department表中的“Accounts”有关,所以没关系。

更改关系时,修改视图:&lt;%= p.department.name%&gt;

我还是得到了
undefined method `department' for #<Person:0x47f9040>

1 个答案:

答案 0 :(得分:0)

你有相反的关系(hasone-belongssto)。在您的情况下,外键应该在“归属”一侧,部门。

因此,您必须更新数据库架构或在模型中切换has_onebelongs_to

您可以阅读有关主题here的更多信息。

PS另外值得注意的是,这是一个非常奇怪的组织,每个部门都只由一个人组成。

修改关于新数据
你的代码不一致。您在原始帖子中使用了p.department_id,之后使用了p.person_department_id 注意,rails无法从您的脑海中读取外键名称,因此默认情况下假定为 modelname _id。如果你想要不同的东西,specify value explicitly

此外,请在您的问题中发布更新的代码,而不是新的答案。有人可能会感到困惑。