Rechercher dans Rails
J'ai une table de "posts" avec les attributs qui comprennent title
et 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>
et post.rb
def self.search(search, id)
if search
where(['name LIKE ?', "%#{search}%"])
else
scoped
end
end
Quand je soumettre la recherche params, je reçois un message d'erreur:
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: je recherche par "titre".
source d'informationauteur Dmytro Vasin
Vous devez vous connecter pour publier un commentaire.
Bien que ce n'est pas une réponse directe à votre question, voici quelques ressources qui peuvent vous aider à vous d'en apprendre davantage sur la recherche et la mise en œuvre dans votre application Rails.
Un Simple formulaire de recherche
Formulaire de recherche avancée
La recherche avec AJAX
La fonctionnalité de recherche puissant avec la Tache gem
Liste des plus populaires outils de recherche pour Ruby
---------------Mise à JOUR----------------
Elasticsearch a été de plus en plus en popularité en raison de certains modernes de trucs qu'il a, comme l'instant d'indexation. Il a un rubis gemme nommé pneu. Certainement en valeur un regard.
Elasticsearch
Pneu
---------------Mise à JOUR 2----------------
Pneu a été mis à la retraite et a été remplacé par Elasticsearch-ruby
Elasticsearch avec gem searchkick
note: searchkick est également apporté par pneu) vous rend plus à l'aise pour travailler sur.
De plus, référez-vous:
SearchKick
Pour les gens de venir ici et de chercher une solution dans les Rails 4, essayez l'exemple suivant:
Postes De Contrôleur:
Modèle Post:
L'index.html.erb reste le même à part le formulaire de recherche:
Notez que les chemins, les contrôleurs et les colonnes que vous utilisez peut être différent.