1

我正在关注 Railcasts 上的视频,但我被卡住了。这是我的代码:

locals_controller.rb

def landing
@locals = Local.search(params[:search])
end

local.rb (模型)

def self.search(search)
  if search
    where('nome LIKE ?', "%#{search}%")
  else
    all
  end
end

和视图landing.html.erb

<% 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是 nil ,因为它说"undefined method each for nil:nilClass"

_landing_search.html.erb

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

我错过了什么?

我还添加了

match '/', to: "locals#landing"

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

4

3 回答 3

2

也许您应该将o更改为a in name ?

def self.search(search)
  if search
    where('name LIKE ?', "%#{search}%")
  else
    all
  end
end
于 2012-07-17T17:03:04.373 回答
2

一切似乎都很好,但我检查了你的代码,你定义了landing两次动作(底部的一个覆盖了第一个):

def landing
  @locals = Local.search(params[:search])
end

# ...    

def landing #line 86
end

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

于 2012-07-18T13:31:44.913 回答
0

首先,检查您在控制器中定义的登陆方法不止一个,如果是,将调用最新的方法。

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

def self.search(opts)
  return self.all if opts.blank?
  self.where('nome LIKE ?', "%#{opts}%")
end
于 2012-07-18T14:11:43.250 回答