Gente,

He resuelto el problema de consultar con acts_as_ferret sobre múltiples
modelos. Apartenemente era un problema de configuración de índices :(...

En la documentación de ferret se mencionan 'gotchas' (
http://projects.jkraemer.net/acts_as_ferret/wiki/gotchas), de posibles
problemas que puedan surgir, y bueno por suerte y con razón, este constituia
uno de ellos ;)

En particular, como dice la última sección, antes de utilizar consultas
sobre múltiples modelos es necesario crear los índices sobre los n-modelos
sobre los cuales se va a consultar, como lo muestra el ejemplo de la
documentación.

Así que caso resuelto :D, lo menciono por si alguien tuvo un problema
similar para que tome en cuenta esto.

Saludos,
    Marcelo

On Dec 15, 2007 12:36 AM, Emmanuel Oga <[EMAIL PROTECTED]>
wrote:

>
> --- Emmanuel Oga <[EMAIL PROTECTED]>
> escribió:
>
> > --- Marcelo Giorgi
> > <[EMAIL PROTECTED]>
> > escribió:
> >
> > > Gente,
> > >
> > > Quiero comentarles mis avances, hopefully alguien
> > > sepa como seguir a partir
> > > de aquí ;)
> > >
> > > Encontre
> > >
> >
>
> http://nasir.wordpress.com/2007/10/25/full-text-search-using-ferret-acts_as_ferret-with-rails/
> ,
> > > que menciona que el método find_with_ferret (en
> > > lugar de multi_search),
> > > desarrollado en los últimos meses (ya en versión
> > > stable), esta integrada con
> > > will_paginate.
> > >
> > > Nuevamente, esto funciona bárbaro, para 1 modelo
> > :(,
> > > en este caso mi código
> > > luce así:
> > >
> > > *class Article < **ActiveRecord::Base*
> > > *  acts_as_ferret :store_class_name => true*
> > > *  ...*
> > > *end
> > > *
> > > El controlador luce así:
> > >
> > > *class SearchResultsController <
> > > ApplicationController*
> > > *  ..*
> > > *  def search*
> > > *    @collection = Article.find_with_ferret
> > > params[:q], :page =>
> > > params[:page], :per_page => 1*
> > > *  end*
> > > * ...*
> > > *end
> > > *
> > > Luego, cuando quiero realizar una busqueda sobre 2
> > > modelos (Article y
> > > NewsItems), realizo los siguientes cambios:
> > >
> > >  *class NewsItem < ActiveRecord::Base
> > > *
> > > *  acts_as_ferret :store_class_name => true*
> > > *  ...*
> > > *end
> > > *
> > > Y modifico el controlador de la siguiente forma:
> > >
> > >  *class SearchResultsController <
> > > ApplicationController*
> > > *  ..*
> > > *  def search*
> > > *    @collection = Article.find_with_ferret
> > > params[:q], :page =>
> > > params[:page], :per_page => 1, :multi =>
> > [NewsItem]*
> > > *  end*
> > > * ...*
> > > *end
> > > *
> > > Este código me produce el siguiente error:
> > >
> > > *RuntimeError in Search resultController#index
> > > ':store_class_name => true' required for
> > > multi_search to work*
> > >
> > > Bueno esta sería la nueva situación, si alguien
> > > tiene idea que pueda estar
> > > pasando estaría buenisimo ;)
> > >
> > > salutes,
> > >  marcelo.
> > >
> > > On Dec 13, 2007 9:51 AM, Marcelo Giorgi
> > > <[EMAIL PROTECTED]>
> > > wrote:
> > >
> > > >
> > > > Hola gente,
> > > > En esta oportunidad la consulta que tengo para
> > > hacerles esta más
> > > > relacionada a Rails, quizas alguno de ustedes,
> > con
> > > su expertice,  me puedan
> > > > tirar una línea en la oscuridad...
> > > >
> > > > Estoy trabajando en un proyecto en donde
> > utilizo:
> > > roar (
> > >
> >
> http://agilewebdevelopment.com/plugins/roar_offers_automated_rails
> > > > , que internamente utiliza paginator-1.0.9 para
> > la
> > > paginación ), para el
> > > > manejo de ABMs, y will_paginate (
> > > >
> > >
> >
>
> http://www.davidrv.com/web/blog/showNew/paginacion-a-medida-en-ruby-on-rails-will-paginate
> ),
> > > > que ofrece funcionalidades de paginación.
> > > >
> > > > El problema se dió cuando quise integrar
> > > will_paginate con acts_as_ferret
> > > > (para agregar funcionalidades de búsqueda sobre
> > > varios modelos a la app).
> > > > Encontre algunos links que hacen referencia a la
> > > integración de ambos
> > > > plugins, como lo menciona Emmanuel en su blog :D
> > (
> > > > http://emmanueloga.wordpress.com/2007/09/)
> > > >
> > > > Hasta ahí todo bien, integrar acts_as_ferret con
> > > will_paginate utilizando
> > > > el método paginate_search sobre un modelo
> > Article
> > > (por ejemplo), anda
> > > > bárbaro!
> > > >
> > > > Pero, la intensión de utilizar acts_as_ferret
> > era
> > > hacer uso de la búsqueda
> > > > a través de varios modelos, a través del método
> > > multi_search, por ej. Ahí es
> > > > donde se me complico, o por lo menos, no
> > encontre
> > > una solución que integre
> > > > act_as_ferret y will_paginate cuando el primero
> > > consulta sobre múltples
> > > > modelos (multi_search).
> > > >
> > > > De hecho he encontrando, en RAILS forum, el
> > > siguiente thread
> > > >
> > http://www.railsforum.com/viewtopic.php?pid=47211,
> > > que presenta el mismo
> > > > problema y allí se sugiere utilizar
> > >
> >
> paginating_find<http://cardboardrocket.com/pages/paginating_find>en
> > > lugar de will_paginate; intente seguir este
> > esquema
> > > pero tampoco me
> > > > anduvo, instale el paginating_find pero me
> > comenzó
> > > a dar algunos errores
> > > > (quizas por incompatibildad con los otros
> > > paginators que mencione
> > > > anteriormente y que tengo instalados en mi
> > app)..
> > > >
> > > > Any thoughts ?
> > > >
> > > > saludos y gracias,
> > > >   marcelo.
> > > >
> > >
> > >
> > >
> > > --
> > > Ing. Marcelo Giorgi
> > > > _______________________________________________
> > > Ruby mailing list
> > > [email protected]
> > >
> >
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
> > >
> >
> > Marcelo, a decir verdad mis busquedas siempre han
> > sido
> > medio modestas por lo que no investigue la forma de
> > hacer busquedas sobre dos modelos a la vez. Pero
> > recuerdo que podias agregar a la info indexada por
> > ferret el resultado de un metodo de tu model, por
> > ejemplo en tu caso:
> >
> > class Article < **ActiveRecord::Base*
> >   has_many :news_items
> >   acts_as_ferret :fields => %w|campo1 campo2|,
> >                  :methods => %w|nitems|
> >
> >   def nitems
> >     self.news_items.map { |a| a.name }.join(" ")
> >   end
> > end
> >
> > Si no logras hacer funcionar la busqueda con
> > multiples
> > models, quizas eso te sirva. Si lo logras, despues
> > contanos :)
> >
>
> mmm en la api methods no figura.. que raro recordaba
> que si!!! Pero creo que se puede hacer... de alguna
> manera... :)
>
>
>
> ----------------------------------------------------------------------------
> EmmanuelOga.WordPress.com
>
>
>      Tarjeta de crédito Yahoo! de Banco Supervielle.
> Solicitá tu nueva Tarjeta de crédito. De tu PC directo a tu casa.
> www.tuprimeratarjeta.com.ar
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>



-- 
Ing. Marcelo Giorgi
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a