我知道我可能会遗漏一些东西。我在这里关注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
现在,当我在名称表中搜索关键字时,我得到表中的所有名称,即使是与输入的关键字无关。
答案 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 %>