首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Railscasts #37 nil:nilclass未定义的方法'each‘

Railscasts #37 nil:nilclass未定义的方法'each‘
EN

Stack Overflow用户
提问于 2012-07-18 00:56:41
回答 3查看 3.2K关注 0票数 1

我正在关注铁路广播上的视频,但我被卡住了。下面是我的代码:

locals_controller.rb

代码语言:javascript
复制
def landing
@locals = Local.search(params[:search])
end

local.rb (型号)

代码语言:javascript
复制
def self.search(search)
  if search
    where('nome LIKE ?', "%#{search}%")
  else
    all
  end
end

和视图landing.html.erb

代码语言:javascript
复制
<% if signed_in? %>
<%= form_tag root_path, :method => :get, :class  => "center form-search" do %>
    <p>
        <%= text_field_tag :search, params[:search], :class  =>  "input-medium search-query" %>
        <%= submit_tag "Search", :name => nil, :class  => "btn" %>
    </p>
    <%= render "landing_search" %>
<% end %>

而引发错误的部分,因为,基本上,@locals是零,因为它是"undefined method each for nil:nilClass"

代码语言:javascript
复制
_landing_search.html.erb

    <% @locals.each do |local| %>
    ...

我错过了什么?

I‘’va还添加了

代码语言:javascript
复制
match '/', to: "locals#landing"

在我的routes.rb中,因为在我的例子中,要显示的页面位于根路径

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-18 21:31:45

看起来一切都很好,但是我已经检查了你的代码,并且你定义了两次landing动作(底部的动作覆盖了第一个动作):

代码语言:javascript
复制
def landing
  @locals = Local.search(params[:search])
end

# ...    

def landing #line 86
end

因此,如果你删除第二个,一切都会好起来的。

票数 2
EN

Stack Overflow用户

发布于 2012-07-18 01:03:04

也许你应该在名字上把o改为a

代码语言:javascript
复制
def self.search(search)
  if search
    where('name LIKE ?', "%#{search}%")
  else
    all
  end
end
票数 2
EN

Stack Overflow用户

发布于 2012-07-18 22:11:43

首先,检查你在控制器中定义了多个登陆方法,如果是,最后一个方法将被调用。

第二步,像这样改变你的控制器:

代码语言:javascript
复制
def self.search(opts)
  return self.all if opts.blank?
  self.where('nome LIKE ?', "%#{opts}%")
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11527258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档