ruby on rails - sobre - Rieles y manchas de manchas solares y filtrado
protuberancias solares (1)
Necesitaba la respuesta a esto yo mismo, y viendo que parece que no hay nada más en la web sobre eso, decidí tratar de resolverlo por mi cuenta.
Primero llegué a la conclusión a través de la lógica, que el controlador puede manejar múltiples facetas y no hay motivos por los que no puede hacerlo, recordé que la mejor parte del rubí es que es el código más legible, intente leer su primer controlador y usted Veo que tiene sentido que funcione. Probé esto al ingresar manualmente una cadena de consulta en url, que arrojó los resultados esperados. Por lo tanto, una vez que me di cuenta de eso, supe que el problema residía en mi punto de vista (lo que me hizo palidecer porque ahora es bastante obvio)
Su ejemplo es significativamente más complejo que el mío, y mi respuesta podría no cumplir al 100% con todos los requisitos, pero estoy bastante seguro de que está cerca. También su código en su modelo con respecto a "departamental", etc. es un poco redundante en mi opinión
Controlador
def index
@search = Style.search do
fulltext params[:search]
facet :departmental, :seasonal, :classifier
with(:departmental, params[:department]) if params[:department].present?
with(:classifier, params[:classification]) if params[:classification].present?
with(:seasonal, params[:season]) if params[:season].present?
end
Ver
%h4 Departments
%ul
- for row in @search.facet(:departmental).rows
%li
- if params[:department].blank?
= link_to row.value, styles_path(
:department => row.value,
:classification => (params[:classification] unless params[:season].blank?),
:season => (params[:season] unless params[:season].blank?))
(#{row.count})
- else
%strong= row.value
= link_to "remove", styles_path(
:department => nil,
:classification => (params[:classification] unless params[:season].blank?),
:season => (params[:season] unless params[:season].blank?))
Prácticamente un noobie aquí, así que agradezco cualquier ayuda que alguien pueda dar.
Estoy tratando de agregar facetas a la búsqueda en mi sitio a través de Sunspot. Ryan acaba de lanzar un gran Railscast que me ayudó a comenzar: http://railscasts.com/episodes/278-search-with-sunspot . Lo conseguí y pude agregar facetas adicionales. Mi problema es que las facetas son independientes entre sí. Si tengo 3 facetas en 3 atributos diferentes, cuando selecciono una faceta una vez que ya la he seleccionado, me gustaría mostrar solo los resultados que caen en ambas facetas. A partir de ahora, simplemente cambia de una faceta a la otra. Siento que esto no debería ser tan difícil, pero no puedo entender cómo hacerlo.
Encontré este tutorial: http://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/, que creo que está haciendo lo que quiero. Intenté que esto funcionara, pero incluso cuando intento que funcione con una sola faceta, no aparece ningún resultado. Solo el nombre de la faceta y luego nada más.
¿Pensamientos?
¡¡Gracias!!
ACTUALIZAR
Aquí está el código de muestras de lo que estoy tratando de hacer:
Ajustando el código de Railscasts obtuve esto:
En mi StylesController:
def index
@search = Style.search do
fulltext params[:search]
facet :departmental, :seasonal, :classifier
with(:departmental, params[:department]) if params[:department].present?
with(:classifier, params[:classification]) if params[:classification].present?
with(:seasonal, params[:season]) if params[:season].present?
end
En mi vista de índice de estilo (sé que necesito condensar esto)
= form_tag styles_path, :method => :get do
%p
= text_field_tag :search, params[:search]
= submit_tag "Search", :name => nil
#facets
%h4 Departments
%ul
- for row in @search.facet(:departmental).rows
%li
- if params[:department].blank?
= link_to row.value, :department => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :department => nil})
%h4 Classifications
%ul
- for row in @search.facet(:classifier).rows
%li
- if params[:classification].blank?
= link_to row.value, :classification => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :classification => nil})
%h4 Seasons
%ul
- for row in @search.facet(:seasonal).rows
%li
- if params[:season].blank?
= link_to row.value, :season => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :season => nil})
En mi modelo de estilo:
searchable do
text :number, :description, :department, :classification, :season
string :departmental
string :classifier
string :seasonal
end
def departmental
self.department
end
def classifier
self.classification
end
def seasonal
self.season
end
Y mi versión del código upubly, emparejado para solo intentar que la faceta "estacional" funcione:
Dejé el Search Partial, el Search Model y el SearchHelper de la misma manera que en el ejemplo. Traté de meterme con el Ayudante ya que mis Facetas extraerán valores de texto, no solo ID de otros Modelos, pero fue en vano. No tengo mis diversos atributos configurados como Modelos individuales ya que no creía que necesitara esa funcionalidad, pero estoy empezando a pensar lo contrario.
StylesController:
def index
@title = "All styles"
@search = search = Search.new(params[:search]) # need to set local variable to pass into search method
@search.url = styles_path
@search.facets = [:seasonal]
@solr_search = Style.search do
keywords search.query
with(:seasonal, true)
search.facets.each do |item|
facet(item)
with(:seasonal, params[:season]) if params[:season].present?
end
any_of do
# filter by facets
search.facets.each do |item|
with(item).all_of( params[item].try(:split, "-") ) if params[item].present?
end
end
paginate(:page => params[:page], :per_page => 10)
end
De nuevo, agradezco la ayuda. Definitivamente un novato, pero realmente disfruta el proceso de construcción de este sitio. Stackoverflow ya ha sido una gran ayuda para mí, por eso le debo a todos los que publican respuestas aquí un gran agradecimiento.