Поиск в Rails - программирование

Поиск в 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: Я хочу искать по названию.

4b9b3361

Ответ 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 %>

Обратите внимание, что используемые вами пути, контроллеры и столбцы могут быть разными.