我真的遇到了一个问题,我认为这是一个相对容易的问题,并且可能很容易纠正我可能做错的事情。
我有一个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>
答案 0 :(得分:0)
你有相反的关系(hasone-belongssto)。在您的情况下,外键应该在“归属”一侧,部门。
因此,您必须更新数据库架构或在模型中切换has_one
和belongs_to
。
您可以阅读有关主题here的更多信息。
PS另外值得注意的是,这是一个非常奇怪的组织,每个部门都只由一个人组成。
修改关于新数据
你的代码不一致。您在原始帖子中使用了p.department_id
,之后使用了p.person_department_id
注意,rails无法从您的脑海中读取外键名称,因此默认情况下假定为 modelname _id。如果你想要不同的东西,specify value explicitly。
此外,请在您的问题中发布更新的代码,而不是新的答案。有人可能会感到困惑。