我正在阅读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>
即使“undefined method `microposts'”也无法帮助我。
非常感谢任何帮助。
答案 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
,这意味着@user
是nil
。我们看到它被分配了current_user
的结果,因此该方法返回nil
。