1

我不断收到上述错误和以下消息:

'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”的模型,我有类似的代码块,所以我假设我也会遇到类似的错误。奇怪的是,我可以同时创建微博和食谱,并且两者都会显示在登录用户的主页上。当我转到“用户”并尝试单击那里的帐户时出现此错误。有任何想法吗?提前致谢

4

2 回答 2

2

失败的行是试图渲染一个局部视图——渲染的参数,但通常@micropostsnil一个引用视图文件的字符串,例如

<%= render "microposts" %>

会告诉 Rails 查找目录中命名_microposts.html.erbviews/users文件。视图中的使用render不同于控制器中的使用。

在此处查看有关渲染局部的文档

PS 欢迎来到 StackOverflow——第一个问题很好!

于 2012-12-06T20:05:15.447 回答
0

我刚刚遇到了这个问题,而其他答案提供了丰富的信息,这个潜在的问题更多地与教程中的差异有关。它指示您将此代码添加到您的 users_controller:

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
  end

但是在本教程的前面,你有这个我不记得的 #show 方法,我最终在我的控制器中添加了第 13 章中的一个 #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
于 2017-07-12T21:01:47.493 回答