我一直收到上述错误和以下消息:
'nil' is not an ActiveModel-compatible object that returns a valid partial path.
错误指向源18行。
15: <% if @user.microposts.any? %>
16: <h3>Comments (<%= @user.microposts.count %>)</h3>
17: <ol class="microposts">
18: <%= render @microposts %>
19: </ol>
20: <%= will_paginate @microposts %>
21: <% end %>
我尝试检查命名约定,但我完全按照Michael Hartl的rails教程中的说明进行了操作。对于一个名为“recipes”的模型,我有一个类似的代码块,所以我假设我也会遇到类似的错误。奇怪的是,我可以创建微博和配方,两者都将在主页上显示signed_in用户。当我转到“用户”并尝试点击那里的帐户时,我收到此错误。有任何想法吗?提前致谢
答案 0 :(得分:2)
失败的行正在尝试呈现部分视图 - 呈现的参数,@microposts
是nil
但通常是引用视图文件的字符串,例如
<%= render "microposts" %>
会告诉rails在_microposts.html.erb
目录中查找名为views/users
的文件。在视图中使用render
与在控制器中使用不同。
See doc on rendering partials here
P.S。欢迎来到StackOverflow - 不错的第一个问题!
答案 1 :(得分:0)
我刚遇到这个问题,而其他答案是提供信息的,这个潜在的问题更多地与教程中的差异有关。它指示您将此代码添加到users_controller:
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
end
但是在本教程的前面你有这个#show方法,我没有记得,我在控制器中添加了第二章中的两个#show方法:
def show
@user = User.find(params[:id])
redirect_to root_url and return unless @user.activated?
end
..所以我解决这个问题的方法是将它们合并到一个方法中然后我得到了一个用户页面,其中包含了教程图中没有样式的微博。不完全确定如何引用这个Hartl,但我想我会在这里添加它,因为我也刚刚启动Rails,遇到这个问题大约20个令人沮丧的分钟,并且由于某种原因扫描我的user_controller后不知何故注意到了重复的方法。
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
redirect_to root_url and return unless @user.activated?
end