说明:我正在关注:https://www.railstutorial.org/book/toy_app
上的toy_app教程我在第2.3.3节中的运动问题上遇到问题
问题:编辑用户显示页面以显示用户第一个微博的内容。 (使用您的技术复杂性(方框1.1)根据文件中的其他内容猜测语法。)通过访问/ users / 1确认它有效。
在我的 app / views / users / show.html.erb 文件中。我尝试使用 @ micropost.content 对象来显示与用户关联的所有内容。
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= @user.name %>
</p>
<p>
<strong>Email:</strong>
<%= @user.email %>
</p>
<p>
<strong>Content:</strong>
<%= (<%= @micropost.content %>) %>
</p>
<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
结果
用户#show中的NoMethodError
未定义的方法&#39;内容&#39;为零:NilClass
结论
我是否需要为 app / view / user 文件的帖子生成 form_for ?或者,因为我在私人&#39; micropost_params&#39;中设置我的:内容对象。我的microposts_controller.rb中的方法,它不允许控制器之间的对象数据传输?
我在控制台中测试了以下代码行,以确保关联正常:
first_user = User.first
first_user.microposts
micropost = first_user.microposts.first
micropost.user
我觉得我需要在用户控制器文件中定义一个方法,该方法可以访问我的MicroPosts类中的my:content对象。
答案 0 :(得分:1)
您的show
操作应如下所示。
def show
@user = User.find(params[:id])
@micropost = @user.microposts.first
end
现在,在视图中,您可以使用@micropost.content
访问微博的内容。如果用户没有与他相关的微博(没有写过微博)怎么办?在这种情况下,@user.microposts.first
将为nil
。如果您不确定我的意思,请尝试在rails控制台中使用它。
<% if @micropost %>
<%= @micropost.content %>
<% else %>
<p> User has no microposts </p>
<% end %>