简单搜索不在rails app上工作

时间:2017-11-30 09:21:12

标签: ruby-on-rails

我知道我可能会遗漏一些东西。我在这里关注rails casts。

我的模型名为生产,其中包含name列。

在我的控制器中,我添加了一个新的搜索方法,如下所示:

productions_controller.rb

  def index
   @productions =Production.all
  end

  def search
    if params[:search]
      @productions = Production.find(:all, :conditions => ['name LIKE ?', "%#{params[:search]}%"])
    else
      @productions = Production.all
    end
  end

然后我在路线文件中添加了这个动作:

resources :productions do
    collection do
        get 'search'
    end
  end

我在 index.html.erb

中提供了一个搜索字段
<%= form_tag productions_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

然后我为搜索操作创建了一个登陆

search.html.erb

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Director</th>
      <th>Status</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @productions.each do |production| %>
      <tr>
        <td><%= production.name %></td>
        <td><%= production.director %></td>
        <td><%= production.status %></td>
        <td><%= link_to 'Show', production %></td>
        <td><%= link_to 'Edit', edit_production_path(production) %></td>
        <td><%= link_to 'Destroy', production, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

制作表

create_table "productions", force: :cascade do |t|
    t.string "name"
    t.string "director"
    t.integer "status"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

现在,当我在名称表中搜索关键字时,我得到表中的所有名称,即使是与输入的关键字无关。

1 个答案:

答案 0 :(得分:1)

你正在使用Rails 2.3查询语法,这个rails cast非常过时。它应该更像是:

@productions = Production.where('productions.name like ?', "%#{params[:search]}%")

另外,您可以在search操作中使用它,而您应该将此代码放在index操作中,因为搜索表单会路由到index

如果您希望保留search操作,则应更改表单路径:

 <%= form_tag [:search, :productions], :method => 'get' do %>