filtrar los resultados de la matriz con la condición en Ruby on Rails 3.2
Frecuentes
Visto 6,571 veces
2
Tengo esta acción para en mi post_controller.rb:
def index
@search = Post.solr_search do |s|
s.fulltext params[:search]
s.keywords params[:search]
s.order_by :created_at, :desc
s.paginate :page => params[:page], :per_page => 1
end
@posts = @search.results
).page(params[:page]).per(20)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @posts }
format.json { render :json => @posts }
end
end
la variable de instancia @posts
es una matriz.
El modelo de publicación tiene un atributo language
.
quiero entrar en matriz @posts
solo publicaciones con @post.language == "en"
Estoy usando mongoid odm.
¿Cómo puedo hacerlo?
¡Gracias!
3 Respuestas
7
Enumerable es su respuesta!
@en_posts = @posts.find_all { |post| post.language == 'en' }
contestado el 22 de mayo de 12 a las 18:05
1
El problema fue solucionado. He agregado esta condición a la mancha solar:
if params[:locale].present?
s.with(:language, params[:locale])
else
params[:locale] = I18n.locale
s.with(:language, params[:locale])
end
entonces el metodo seria:
def index
@search = Post.solr_search do |s|
s.fulltext params[:search]
s.keywords params[:search]
s.order_by :created_at, :desc
s.paginate :page => params[:page], :per_page => 1
if params[:locale].present?
s.with(:language, params[:locale])
else
params[:locale] = I18n.locale
s.with(:language, params[:locale])
end
end
@posts = @search.results
).page(params[:page]).per(20)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @posts }
format.json { render :json => @posts }
end
end
Muchas gracias!
contestado el 22 de mayo de 12 a las 19:05
0
Si desea abarcarlo bajo @posts
tu puedes hacer:
@posts.where(language: 'en')
O de forma genérica
Post.where(language: 'en')
contestado el 22 de mayo de 12 a las 17:05
Lo siento, pero uso mongoid y @posts
es una matriz. No funciona bien con where, o encuentra métodos con matrices. - hiperrjas
Ups, puede ser malo, lo siento. No vi la parte mongoide en negrita, déjame editar - rogeliog
¿Afecta la regulación de la @search.results
devuelve un Mongoid::Criteria
? - rogeliog
He añadido la solución :D. ¡Muchas gracias! - hiperrjas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 sunspot or haz tu propia pregunta.
¿Por qué post.language es una instancia de
MicrofuncsController
en lugar de una instancia deString
? - DVGlo siento pero me sale error
undefined method eq for #<PostsController:0xbefd318>
Estoy utilizando mongoide - hiperrjasLo siento, fue un error con otro proyecto. Se corrigió el error del comentario - hiperrjas
In
rails c
, que muestra cuando lo hacesPost.first.language.class
? Todavía no tiene sentido por qué post.language le daría una referencia a su controlador cuando está trabajando con un objeto modelo, mongoide o no. - DVG1.9.3p125 :005 > Post.first.language.class => String
- hiperrjas