我正在尝试使用Rails 4制作应用程序。
我有2个表 - user.rb和profile.rb。
User has one profile
Profile belongs to User
用户具有名为first_name和:last_name
的字符串属性在我的个人资料展示视图中,我有这一行:
<%= "#{@profile.user.first_name} #{@profile.user.last_name}" %>
我现在正尝试使用以下元素制作个人资料索引视图页:
<% Profile.all.sort_by(&:created_at).in_groups_of(3) do |group| %>
<div class="row">
<% group.compact.each do |profile| %>
<div class="col-md-4">
<div class="indexdisplay">
<%= image_tag profile.image_url, width: '100%', height: '200px' if profile.image.present? %>
<div class="indexheading"> <%= link_to "#{@profile.user.first_name} #{@profile.user.last_name}" %>, profile %> </div>
</div>
</div>
<% end %>
</div>
<% end %>
我收到错误,说:
undefined method `user' for nil:NilClass
我不明白该行在show视图中如何正常工作,但在索引视图中不起作用。我也不明白为什么它认为用户是一种方法。它是一张桌子。
答案 0 :(得分:2)
您正在user
上调用方法@profile
。是的,它是一个相关的记录,但它是一个方法调用。问题是你在实例变量@profile
上调用它,因为提供的信息不存在。调用时不存在的实例变量返回nil
。在nil
上调用方法会导致您遇到错误消息。
<%= "#{@profile.user.first_name} #{@profile.user.last_name}" %>
的父循环包装是profile
中group
的每个循环。将变量@profile
替换为变量profile
。这应该可以解决您的问题。
答案 1 :(得分:2)
未定义的方法`user'代表nil:NilClass
为了给您更多上下文,此错误表示您的变量未填充数据。
我写这个是因为这是大多数新Ruby开发人员都没有意识到的问题 - 这不是变量的“方法”错误,而是变量本身不存在。
因为Ruby是面向对象的,所以它会将变量分配给text area
以便填充它。因此,不是说变量不存在,而是说你在没有数据的变量上调用未定义的方法。
要解决此问题,您必须确保已正确填充变量。
<强>修复强>
我现在正在尝试创建个人资料索引视图页
在控制器中填充数据,而非您的观点:
NilClass
-
这是你的问题。
当#app/controllers/profiles_controller.rb
class ProfilesController < ApplicationController
def index
@profiles = Profile.all.order :created_at
end
end
#app/views/profiles/index.html.erb
<% @profiles.in_groups_of(3) do |group| %>
...
<% end %>
不存在时,您正在呼叫。
请改为:
@profile