未定义的方法`microposts'为nil:NilClass

时间:2013-12-29 03:59:56

标签: ruby-on-rails ruby ruby-on-rails-4

我正在阅读Michal Hart的教程并研究Rails 4.我花了几个小时来解决这个问题。

user_controller.erb:

class UsersController < ApplicationController
def show
    @user = current_user
    @microposts = @user.microposts
  end
end

micopost_controller.erb:

class MicropostsController < ApplicationController



 def create
    @micropost = Micropost.create(micropost_params)

  end

  private
  def micropost_params
    params.require(:micropost).permit(:content) if params[:micropost]

  end

end

show.html.erb:

<h2>Users Post</h2>
<% if @user.microposts.any? %>
    <table class="microposts" summary="User microposts">
        <%= render @microposts %>
    </table>

_micropost.html.erb:

<tr>
<td class="micropost">
        <span class="content">
            <%= micropost.content %>
        </span>
        <span class="timestamp">
            Posted <%= time_ago_in_words(micropost.created_at) %> ago.
        </span>
    </td>
</tr>

Error Screenshot

即使“undefined method `microposts'”也无法帮助我。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

要尝试的一些调试事项:

您将要确保创建了正确的模型(并将其发布。)确保在所述模型中您已正确定义关联(micropost belongs_to user,user has_many microposts)

之后,请确保使用rake db:migrate创建关联的数据库条目,并注意这将需要重新启动服务器才能真正起作用。

将current_user打印几次,然后查看它是否正确呈现。 pp非常适合这样的事情(漂亮的打印,你会喜欢JSON和其他类型的数据。)

虽然没有更多信息,但这和我真正能给你的一样多。

答案 1 :(得分:0)

@user = current_user # this is returning nil

错误“未定义的方法'foo'代表nil:NilClass”意味着:

“嘿,在某处你写过blahblahblah.foo,但blahblahblah的值是nil,它没有foo方法。” < / p>

在这种情况下,您唯一一次拨打.microposts的时间是@user.microposts,这意味着@usernil。我们看到它被分配了current_user的结果,因此该方法返回nil