18

とを含む属性を持つ「投稿」のテーブルがtitleありbodyます。

post_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:「タイトル」で検索したい。

4

3 に答える 3

45

これはあなたの質問に対する直接の答えではありませんが、検索について学び、Railsアプリに実装する際に役立つ可能性のあるリソースをいくつか紹介します。

簡単な検索フォーム

高度な検索フォーム

AJAXで検索する

Sunspotgemによる強力な検索機能

Rubyで最も人気のある検索ツールのリスト

- - - - - - - -アップデート - - - - - - - -

Elasticsearchは、インスタントインデックス作成など、最新の優れた機能により人気が高まっています。タイヤという名前のルビーの宝石があります。間違いなく一見の価値があります。

Elasticsearch

タイヤ

---------------更新2----------------

タイヤは廃止され、Elasticsearch-rubyに置き換えられました

于 2012-08-17T18:28:57.767 に答える
12

ここに来てRails4で解決策を探している人は、次の例を試してください。

投稿コントローラー:

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

ポストモデル:

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 %>

使用しているパス、コントローラー、および列は異なる場合があることに注意してください。

于 2015-10-08T13:07:57.817 に答える
10

ジェムサーチキックを使用したElasticsearch

:searchkickはタイヤによっても提供されます)作業がより快適になります。

詳細については、以下を参照してください。

SearchKick

于 2014-01-18T06:10:32.987 に答える