He creado una aplicación de blog w/ruby on rails y estoy tratando de implementar una función de búsqueda. La aplicación de blog permite a los usuarios etiquetar publicaciones. Las etiquetas se crean en su propia tabla y belong_to :post
. Cuando se crea una etiqueta, también lo es un registro en la tabla de etiquetas donde el nombre de la etiqueta es tag_name y está asociado por post_id. Las etiquetas son cadenas.Buscando en Ruby on Rails: ¿cómo busco cada palabra ingresada y no la cadena exacta?
Estoy tratando de permitir que un usuario busque cualquier palabra tag_name en cualquier orden. Esto es lo que quiero decir. Digamos que una publicación en particular tiene una etiqueta que es 'controlador de código ruby'. En mi función de búsqueda actual, esa etiqueta se encontrará si el usuario busca 'ruby', 'ruby code' o 'ruby code controller'. No se encontrará si el usuario escribe 'controlador ruby'.
Esencialmente lo que estoy diciendo es que me gustaría que cada palabra ingresada en la búsqueda sea buscada, no necesariamente la 'cadena' que se ingresa en la búsqueda.
He estado experimentando con la provisión de campos de texto múltiples para permitir al usuario escribir varias palabras, y también he estado jugando con el código siguiente, pero no puedo lograr lo anterior. Soy nuevo en ruby and rails lo siento si esta es una pregunta obvia y antes de instalar una joya o un plugin pensé que verificaría si había una solución simple. Aquí está mi código:
Vista: /views/tags/index.html.erb
<% form_tag tags_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search], :class => "textfield-search" %>
<%= submit_tag "Search", :name => nil, :class => "search-button" %>
</p>
<% end %>
TagsController
def index
@tags = Tag.search(params[:search]).paginate :page => params[:page], :per_page => 5
@tagsearch = Tag.search(params[:search])
@tag_counts = Tag.count(:group => :tag_name,
:order => 'count_all DESC', :limit => 100)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @tags }
end
end
Tag Modelo
class Tag < ActiveRecord::Base
belongs_to :post
validates_length_of :tag_name, :maximum=>42
validates_presence_of :tag_name
def self.search(search)
if search
find(:all, :order => "created_at DESC", :conditions => ['tag_name LIKE ?', "%#{search}%"])
else
find(:all, :order => "created_at DESC")
end
end
end
Acabo de probar su segundo bloque de código y obtuve el siguiente error: SQLite3 :: SQLException: no dicha columna: controller: SELECT * FROM "tags" WHERE (ruby OR controller) – bgadoci
para la búsqueda: ruby controller – bgadoci
Hubo errores en mi código. Actualizado el código eche un vistazo. –