我一直在搜索Stack Overflow几个小时,但没有一个相关的问题似乎适用于我的问题.
我是Rails的新手,这是我的第一个真正的项目,我可能会混淆MVC设置.我试图在searching_controller.rb的一个动作中分配@stars实例变量:
def create
@search = Search.new(params[:search])
tempstr = searchstr(@search)
@stars = Star.where("tempstr", :limit => 100)
end
Run Code Online (Sandbox Code Playgroud)
@search创建得很好,是一个具有不同参数的复杂搜索.tempstr它只是一个简单的字符串容器,用于结果searchstr(@search),这是一种将搜索参数转换为MySql相关字符串的快速方法(在这种情况下,这似乎比尝试正常使用.where帮助程序更容易).我确信我可以searchstr(@search)直接放入.where,但我现在将它们分开,这样我就可以在它们通过时检查这些元素.
无论如何,当我尝试调用@starsshow.html.erb视图时,问题出现了.即使有这样简单的事情:
<% @stars.each do |star| %>
<%= display stuff %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说'each' is not a method of nil:NilClass.所以,我将其更改为以下内容,以查看@stars是否为零:
<%= @stars.inspect %>
Run Code Online (Sandbox Code Playgroud)
果然,@stars是的nil.但是,当我将此行添加到我的控制器以检查@stars时:
return render @stars.each
Run Code Online (Sandbox Code Playgroud)
我看到变量是用Star.where()中正确的星形对象填充的,就像我想要的那样.快速.inspect显示变量在控制器中不是nil.
所以,我不确定为什么视图接收它为nil如果已经在控制器中定义就好了.不过,如果我误解了MVC是如何工作的,我也不会感到惊讶.Star类是在Star模型中定义的,但也许是因为我试图从Searches控制器访问它,因此它没有为视图初始化?
我应该以其他方式做这件事吗?我尝试使用局部变量(使用stars而不是@stars),但是视图显示"未定义的局部变量或方法'星''.
任何帮助都会非常感激,我已经把我的大脑搞砸了几个小时创建复杂的搜索并将星文件数据解析到数据库中,所以我有点烦躁.如果需要,我可以提供更多信息,我不确定在提供答案方面还有什么帮助.