Yeah, I've removed the link to RDocs, because they were woefully out  
of date, and everything that's in there should be covered in the doc  
site. Which is a work in progress, but I'm just editing it to mention  
the #where method.

Good to know you found a solution that works :)

Cheers

-- 
Pat

On 22/05/2009, at 10:17 AM, Matt Todd wrote:

> Ah, duh, that's so obvious.
>
> Hmm, for some reason, I can't find the RDocs from the documentation  
> site... might want to make it a little more obvious. I've been  
> spelunking through the source to find out what I can, lol.
>
> I'm not familiar with the "where" method in the define_index  
> block... what does that apply to? I'm sure the RDoc would make it a  
> little more obvious.
>
> I will use this:
>
> has_many :accepted_model_versions, :class_name => "Model::Version",
>     :conditions => "model_versions.state = 'accepted'", :order =>  
> "created_at DESC"
>
> You can specify table names in the conditions to make sure it won't  
> conflict.
>
> Thanks for the inspiration :)
>
> The acts_as_revisible looks interesting, though we're already  
> committed with a significant codebase built on acts_as_versioned. I  
> will keep it in mind, though :)
>
> Matt
>
>
>
> On Thu, May 21, 2009 at 7:49 PM, Pat Allan <p...@freelancing- 
> gods.com> wrote:
>
> Hi Matt
>
> I'd probably add a specific association pointing to the most recent
> version:
>   has_one :accepted_version, :class_name => "ModelVersion",
>     :conditions => "state = 'accepted'", :order => "created_at DESC"
>
> However, not sure how well that condition gets translated in the joins
> built by ActiveRecord - it will likely fall over if there's another
> table joined to that has the column 'state'.
>
> An alternative that could be worth trying is putting the condition in
> your define_index block:
>   where "model_versions.state = 'accepted'"
>
> Hope this provides some inspiration.
>
> Cheers
>
> --
> Pat
>
> On 21/05/2009, at 3:38 PM, Matt Todd wrote:
>
> >
> > I'm tasked with indexing a model that has associations  
> (specifically,
> > this model acts_as_versioned so we have model_versions table that
> > we're indexing). This is really simple and works like a charm, but  
> now
> > I need to be able to only index those versions that have a specific
> > column set to a specific value (the versions acts_as_state_machine  
> so
> > we only want to index those that are marked as accepted).
> >
> > This means, our model should only be indexed when it is accepted.
> >
> > Now, I can easily handle this after the search returns normally, but
> > I'd rather not. It could be done easily by modifying the SQL  
> generated
> > for the configuration file, but I can't determine how to modify  
> the ON
> > condition for joins. Is this possible or easily patchable?
> >
> > For instance, i would want something like:
> >
> > SELECT
> >  models.id * 1 + 0 AS id ,
> >  CAST(models.name AS CHAR) AS name,
> > FROM models
> >  LEFT OUTER JOIN models
> >    ON model_versions.id = models.id AND model_versions.state =
> > 'accepted'
> > WHERE ...;
> >
> > Currently, my define_index block looks like this:
> >
> >  define_index do
> >    indexes versions.names, :as => :version_names
> >  end
> >
> > But I'd like to be able to do something like:
> >
> >  indexes versions.names, :as => :version_names, :if =>
> > ["model_versions.state = ?", "accepted"]
> >
> > :conditions could be used instead, since this should be rendered  
> as a
> > condition statement.
> >
> > Obviously I've simplified things a bit, but all the essential
> > information should be here.
> >
> > ALTERNATIVELY, perhaps there's a way to use attributes and filters  
> on
> > the search to create the same results? From my understanding,  
> though,
> > since all of the field values are combined, there wouldn't be a  
> way to
> > prevent select portions of the history.
> >
> > To be specific, the goal is to be able to search for the models and
> > only return the models that have been accepted. The problem comes in
> > that the models include pending and rejected versions (they are kept
> > in the history) and would thus get indexed.
> >
> > What sucks is that the model is always the most recent edit, even if
> > the most recent edit isn't the accepted version.
> >
> > One last alternative that I've just thought of would be to have a  
> view
> > of accepted_model_versions that I would then make a model with and
> > define that as an index... or an attribute to filter on... hmm.
> >
> > Thanks for your input, if any ^_^
> >
> > Matt
> >
> >
> >
> > --
> > Matt Todd
> > Highgroove Studios
> > www.highgroove.com
> > cell: 404-314-2612
> > blog: maraby.org
> >
> > Scout - Web Monitoring and Reporting Software
> > www.scoutapp.com
> >
> > >
>
>
>
>
>
>
> -- 
> Matt Todd
> Highgroove Studios
> www.highgroove.com
> cell: 404-314-2612
> blog: maraby.org
>
> Scout - Web Monitoring and Reporting Software
> www.scoutapp.com
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to