2012-03-15 9 views
5

mam kolejny model z pola tablicy:Czy można wyszukać plamę słoneczną w tablicy?

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 

mam w moim kontrolera:

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 

tym, kiedy ja nie reindex pokazać błąd, ale:

To nie działa prawidłowo dla mnie. Pojawia się następny błąd w dzienniku:

Sunspot :: UnrecognizedFieldError (bez pola skonfigurowany dla zaproszenie z nazwą „odbiorców”):

Próbowałem też:

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

ale pojawia się następny błąd podczas reindex:

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

mogę zrobić rozwiązać ten problem?

+1

Ja nie znam żadnego Ruby, ale nie masz pole 'recipients' że jest' wielowartościowy = TRUE? – aitchnyu

+0

Odbiorcy to tablica z 4 adresami e-mail. Mam teraz to: 'string: repins,: multiple => true do \t repins.map {| repin | repin} end'. Problem polega na tym, że dostaję błąd ** NoMethodError (niezdefiniowana metoda 'gsub 'dla [" # "]: Array): ** – hyperrjas

+0

Poprawkę dla tego pytania należy dodać': multiple => true' i napraw problem ** odbiorcy nie są polem o wielu wartościach, więc nie mogą indeksować wartości [] **. Otwieram inne pytanie z ostatnim problemem. Dziękuję Ci! @aitchnyu – hyperrjas

Odpowiedz

7

Model ma skojarzenie has_many z . Oznacza to, że invitation może mieć wiele recipients.

Więc spróbuj tego:

string :recipients, :multiple => true do 
    recipients.map { |recipient| recipient } 
end 
Powiązane problemy