Поиск в Rails
У меня есть таблица "posts" с атрибутами, которые включают title
и body
.
posts_controller.rb:
class PostsController < ApplicationController
def index
@posts = Post.search(params[:search], params[:id])
end
end
index.html.erb:
<%= form_tag posts_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search]%>
<%= submit_tag "Search", :name => nil %>
<% end %>
<hr />
<table>
<tr>
<th>Title</th>
<th>Text</th>
</tr>
<tr>
<td><hr></td>
<td><hr></td>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', :action => :show, :id => post.id %></td>
<td><%= link_to 'Edit', :action => :edit, :id => post.id %></td>
<td><%= link_to 'Destroy', { :action => :destroy, :id => post.id }, :method => :delete, :confirm => 'Are you sure?' %></td>
</tr>
<tr>
<td><hr></td>
<td><hr></td>
</tr>
<% end %>
</table>
и post.rb
def self.search(search, id)
if search
where(['name LIKE ?', "%#{search}%"])
else
scoped
end
end
Когда я отправляю параметры поиска, я получаю сообщение об ошибке:
ActiveRecord::StatementInvalid in Posts#index
SQLite3::SQLException: no such column: name: SELECT "posts".* FROM "posts" WHERE (name LIKE '%lorem%')
Extracted source (around line #23):
23: <% @posts.each do |post| %>
APD: Я хочу искать по названию.
Ответы
Ответ 1
Хотя это не прямой ответ на ваш вопрос, вот некоторые ресурсы, которые могут помочь вам, поскольку вы изучаете поиск и внедряете его в свое приложение Rails.
Простая форма поиска
Расширенная форма поиска
Поиск с помощью AJAX
Мощная функция поиска с драгоценным камнем Sunspot
Список самых популярных инструментов поиска для Ruby
--------------- UPDATE ----------------
Elasticsearch растет в популярности благодаря некоторой современной удивительности, которую он имеет, например, мгновенной индексации. У этого есть рубиновый драгоценный камень, названный шиной. Определенно стоит посмотреть.
Elasticsearch
Tire
--------------- ОБНОВЛЕНИЕ 2 ----------------
Шина была удалена и заменена на Elasticsearch-ruby
Ответ 2
Эластический поиск с драгоценным камнем поиск
примечание: поиск также распространяется на шину) упрощает работу.
Подробнее см.
SearchKick
Ответ 3
Для людей, приезжающих сюда и ищущих решение в Rails 4, попробуйте следующий пример:
Контроллер сообщений:
class PostsController < ApplicationController
def index
if params[:search]
@posts = Post.search(params[:search]).order("created_at DESC")
else
@posts = Post.all.order('created_at DESC')
end
end
end
Post Model:
def self.search(search)
# Title is for the above case, the OP incorrectly had 'name'
where("title LIKE ?", "%#{search}%")
end
index.html.erb остается тем же, что и форма поиска:
<%= form_tag(posts_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Posts" %>
<%= submit_tag "Search" %>
<% end %>
Обратите внимание, что используемые вами пути, контроллеры и столбцы могут быть разными.