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

すべて問題ないようですが、コードを確認したところ、landingアクションを 2 回定義しました (一番下のアクションが最初のアクションを上書きします)。

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

# ...    

def landing #line 86
end

したがって、2 番目のものを削除すれば、すべて問題ありません。

于 2012-07-18T13:31:44.913 に答える
2

多分あなたは名前をaに変更する必要があります

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

最初に、コントローラーに複数の着陸方法を定義するものを確認します。そうであれば、最新の方法が呼び出されます。

次に、コントローラーを次のように変更します。

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