我在Rails控制器中定义了以下实例变量:
class PagesController < ApplicationController
def about
@story, @story2 = Post.tagged_with("test").all(order: "RANDOM()", limit: 2)
end
end
但是,当我尝试在视图页面中使用该变量时,我收到以下错误:
NoMethodError in Pages#about
undefined method user for nil:NilClass
视图中的任何内容似乎都无效。这是抛出错误的视图的一部分:
<% if @story.user.photo_file_name.present? %>
<%= image_tag @story.user.photo.url(:avatar) %>
<% else %>
<%= image_tag('avatar.png', :size => "50x50") %>
<% end %>
我没有看到控制器中的变量定义有问题。导致错误的原因是什么?
谢谢!
答案 0 :(得分:0)
您似乎没有帖子,因此@story
为nil
答案 1 :(得分:0)
您的实例变量未填充,因此您的查询不得返回任何内容。数据库中没有任何内容与您要查找的内容相匹配,或者请求格式不正确。
如果您确定数据库中有匹配的记录,我会尝试将其作为替代方案,看看它是否有帮助:
@story, @story2 = Post.tagged_with("test").order("RANDOM()").limit(4)
答案 2 :(得分:0)
正如其他人已经告诉过你的那样,你的代码中的某些东西会得到零值而不应该。使用pry调试代码,
binding.pry
放在PagesController#about
的开头并开始播放