On Mon, Dec 11, 2006 at 07:57:40AM +0100, Jackie wrote:
> Hello,
> 
> I'm a newbie to aaf and rails and I hope anyone can help me with this.
> I have the following Models:
> 
> class Project < ActiveRecord::Base
[..]
>   acts_as_ferret :fields => {:name => {:store => :yes},
>                              :description => {:store => :yes},
>                              :project_notes => {:store => :yes}}
> 
>   has_many :notes, :as => :notable
[..]
>   def project_notes
>     @index = Array.new
>     for note in self.notes
>       @index << note.details
>     end
>     @index.join(" ")
>   end
[..]
> class Note < ActiveRecord::Base
[..]
>   acts_as_ferret :fields => {:details => {:store => :yes},
>                              :notable_id => {},
>                              :notable_type => {}}
> 
>   belongs_to :notable, :polymorphic => true
> 
[..]
> 
> But when i searched for a project with the note 'test':
> 
>   @results = Project.find_by_contents('test')
> 
> it returns 0 results. I checked in the logs and it created the index:
> 
> Processing NotesController#create (for 127.0.0.1 at 2006-12-11 13:53:53)
> [POST]
> .......
> creating doc for class: Note, id: 17
> Adding field notable_id with value '9' to index
> Adding field details with value 'test project 9' to index
> Adding field notable_type with value 'Project' to index
> .......
> 
[..]
> 
> This doesn't seem to work either, but after I have rebuild the index,
> the note 'test' now appears on the results. Did I miss something here?

yeah ;-)

as you can see from the log above, the index is updated correctly when
the note is saved. The problem is *which* index gets updated. It's the
_notes_ index in this case. The index you are searching when doing 
Project.find_by_contents is the _project_ index.

To solve your problem, you should find the relevant project after
creating the note, and do a ferret_update with it, i.e.:

@note = Note.create params[:note]
@note.project.ferret_update

(this will work only if project_id is contained in params[:note])

if you don't need to find a single note with ferret (with
Note.find_by_contents), you can skip the acts_as_ferret call in
note.rb.


Jens

-- 
webit! Gesellschaft für neue Medien mbH          www.webit.de
Dipl.-Wirtschaftsingenieur Jens Krämer       [EMAIL PROTECTED]
Schnorrstraße 76                         Tel +49 351 46766  0
D-01069 Dresden                          Fax +49 351 46766 66
_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to