2012-03-15 6 views
5

Tengo el siguiente modelo con un campo de matriz:¿Puede la búsqueda de manchas solares dentro de la matriz?

Class Invitation 
include Mongoid::Document 
include Mongoid::Timestamps::Created 
include Sunspot::Mongo 

field :recipients, :type => Array 
attr_accessible :recipients 

searchable do 
    text :recipients do 
    recipients.map { |recipient| recipient } 
    end 
end 

end 

que tengo en mi controlador:

def recipients 

@invitation = Invitation.find(params[:id]) 
@search = Invitation.search do |s| 
s.fulltext params[:search] 
s.with(:recipients, @invitation.recipients) 
end 

@recipients = @search.results 
    respond_to do |format| 
    format.html 
    end 

end 

Este cuando no REINDEX muestro error, sino:

Esto no funciona bien para mí. Me sale el siguiente error en el registro:

de manchas solares :: UnrecognizedFieldError (Ningún campo configurado para la invitación con los receptores '' nombre):

He intentado también:

string :recipients do 
    recipients.map { |recipient| recipient } 
end 

Pero consigo la siguiente error cuando rEINDEX:

recipients is not a multiple-value field, so it cannot index values [] 

¿Puedo hacer solucionar este problema?

+1

I no sabe cualquier rubí, pero ¿Tiene un campo '' recipients' que es de varios valores = true'? – aitchnyu

+0

destinatarios es una matriz con 4 direcciones de correo electrónico. Ahora tengo esto: 'string: repins,: multiple => true do \t repins.map {| repin | repin} final'. El problema ahora es que obtengo el error ** NoMethodError (método indefinido 'gsub 'para [" # "]: Matriz): ** – hyperrjas

+0

La solución para esta pregunta es add': multiple => true' y corrige el problema ** destinatarios no es un campo de valor múltiple, por lo que no puede indexar valores [] **. Voy a abrir otra pregunta con el último problema. ¡Gracias! @aitchnyu – hyperrjas

Respuesta

7

El modelo Invitation tiene una asociación has_many con recipients. Esto significa que un invitation puede tener múltiples recipients.

Así, intente esto:

string :recipients, :multiple => true do 
    recipients.map { |recipient| recipient } 
end 
Cuestiones relacionadas