我在用户和帐户之间有关系:
用户属于某个帐户。一个帐户可以有很多用户。
正如以下查询中所见,这种关系有效:
2.1.4 :010 > User.last.account.name
User Load (2.0ms) SELECT "users".* FROM "users" WHERE "users"."deleted_at" IS NULL ORDER BY "users"."id" DESC LIMIT 1
Account Load (2.4ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."deleted_at" IS NULL AND "accounts"."id" = $1 LIMIT 1 [["id", 4]]
=> "Account A"
但是,如果我显示用户的索引视图,当我尝试显示帐户名称时出现错误:
行
<%= user.account_id %>
KO
<%= user.account.name %>
ERROR:
NoMethodError in Users#index
undefined method `name' for nil:NilClass
<tbody>
<% @users.each do |user| %>
<tr>
<td><a href="/accounts/<%= user.account_id %>"><%= user.account.name %></a></td>
答案 0 :(得分:1)
name
已应用于account
,并且抱怨account
为nil
。
您会发现,对于@users
中的某个用户,user.account_id
有效,但会返回nil
(在浏览器中显示为空白)或ID为没有Account
记录。
如果用户不是必需拥有帐户,则应该使用 user.account.try(:name)
。 (#try
与#send
类似,但nil.try
返回nil
。)
更新:实际上,由于整个表格单元格是该帐户的链接,请尝试以下方式:
<td>
<% if user.account %>
<%# user.account definitely exists if you get into this block. %>
<%= link_to user.account.name, user.account %>
<% end %>
</td>
答案 1 :(得分:1)
错误正在抛出,因为有些users
没有关联account
。
如果您使用Rails 3
:
<%= user.account.name if user.account.present? %>
如果您使用Rails 4
:
<%= user.account.try(:name) %>
答案 2 :(得分:-1)
您需要在控制器中定义@users。我没有看到你的控制器,但我想是这样的:
def index
@users = User.all
end
错误告诉您名称正在返回&#39; nil&#39;。每个用户都有account.name吗?我首先添加&lt;%= user.account.name rescue nil
%&gt;并查看是否显示任何帐户名称。