我有一张表列出了一定数量的经理人。在Manager User Id列中,我试图显示名称而不是整数。我有以下关系
用户模型
has_many :roles, :through => :roles_users
has_many :projects, :foreign_key => "manager_user_id"
项目
class Project < ActiveRecord::Base
belongs_to :user, :foreign_key => "manager_user_id"
Index.html.erb
<tr>
<td><%= project.project_number %></td>
<td><%= project.project_name %></td>
**<td><%= user.project.manager_user_id%></td>**
<td><center><%= link_to image_tag("icons/user.png"), project %></center></td>
<td><center><%= link_to image_tag("icons/user_edit.png"), edit_project_path(project) %></center></td>
<td><center><%= link_to image_tag("icons/user_delete.png"), project, :confirm => 'Are you sure?', :method => :delete %></center></td>
</tr>
我尝试了以下内容:
这些都不起作用,我得到了这个错误:未定义的局部变量或#&lt;#:0xb14cf5c&gt;的方法`user'
我做错了什么。我将上述类似的方法用于另一个表,这很好。
答案 0 :(得分:1)
就像它说的那样,它是未定义的。
如果您已正确编码AR关联并且<%= project.user.name %>
变量可用,则 project
应该有效。您还可以在用户模型中定义to_s
方法,因此当您在视图中执行<%= user %>
时,将显示用户名,而不是“数字”。同样,只要你先准备好user
。
示例:
class User < ActiveRecord::Base
def to_s
name
end
end
答案 1 :(得分:1)
从您的视图看,您在视图中定义了project
,但未user
。既然如此,你肯定想要project.user
形式。这也是有道理的,因为Project只有一个关联的User,而User有多个Projects,所以user.project
是一个数组。
其次,请记住manager_user_id
是Project
的成员,而不是User
的成员,因此project.user.manager_user_id
将不起作用。
我怀疑你想要project.user.name
。
答案 2 :(得分:0)
这里发生的是project.user.manager_user_id
您正在访问不在users表中的字段,它位于项目表中,因此使用project.user.name
您应该能够检索用户名
当您project.user
时,Rails实例化与该项目关联的用户,以便您可以访问用户模型中的每个方法和字段。
我假设您已在控制器中加载项目,但未加载用户,因此当您尝试执行undefined local variable or method 'user' for #<#:0xb14cf5c>
时出现错误user.project.manager_user_id
。