Have you tried passing the missing join directly, via the :join
option?

--Matt Jones

On Jun 29, 2:58 pm, John Woods <[email protected]> wrote:
> So the plugin appears to work. FYI, it's here:
> git://github.com/ianwhite/nested_has_many_through.git
>
> Unfortunately, I'm still having trouble setting up the condition. I've
> renamed a few things and added appropriate associations:
>
> class Gene < ActiveRecord::Base
>   belongs_to :species
>   has_many :gene_orthogroup_linkers, :class_name =>
> 'GeneOrthogroupLinker'
>   has_many :orthogroups, :through => :gene_orthogroup_linkers
>   has_many :ortholog_orthogroup_linkers, :class_name =>
> 'GeneOrthogroupLinker', :through => :orthogroups, :source
> => :gene_orthogroup_linkers
>   has_many :orthologs, :source => :gene, :through
> => :ortholog_orthogroup_linkers, :conditions => 'genes.species_id !=
> genes_2.species_id'
> end
>
> GeneOrthogroupLinker is the class that used to be GenesOrthogroups.
>
> Mysql::Error: Unknown column 'genes_2.species_id' in 'where clause':
> SELECT `genes`.* FROM `genes`   INNER JOIN gene_orthogroup_linkers ON
> ( genes.id = gene_orthogroup_linkers.gene_id )  INNER JOIN orthogroups
> ON ( gene_orthogroup_linkers.orthogroup_id = orthogroups.id )  INNER
> JOIN gene_orthogroup_linkers gene_orthogroup_linkers_2 ON
> ( orthogroups.id = gene_orthogroup_linkers_2.orthogroup_id )
> WHERE (gene_orthogroup_linkers_2.gene_id = 556  AND genes.species_id !
> = genes_2.species_id)
>
> So, it looks to me like the problem is that it selects from genes but
> has no inner join to genes_2, only to gene_orthogroup_linkers_2. How
> do I get it to INNER JOIN genes genes_2 ON
> ( gene_orthogroup_linkers_2.gene_id = genes_2.id AND genes.species_id !
> = genes_2.species_id)?
>
> It seems like as a work-around, I could add a species_id column on the
> GeneOrthogroupLinker model, but that doesn't seem like the cleanest
> solution.
>
> Incidentally, it seems unnecessary to join with orthogroups (why not
> just join the two linkers with orthogroup_id?). Is this easily
> fixable, or better left as-is?
>
> I also tried the named_scope, but it doesn't seem right for this
> situation.
>
> Best,
> John
>
> On Jun 29, 10:46 am, Matt Jones <[email protected]> wrote:
>
>
>
> > The :orthologs association is the problem - Rails doesn't support
> > nesting :through associations. I recall there being a plugin around
> > someplace to do it, so you may want to look into that.
>
> > Depending on what you need, a simple instance method may work as well.
> > For example (on Gene):
>
> > def orthologs
> >   genes_orthogroups.ortholog_groups_for(self).map { |g| g.gene }
> > end
>
> > On GenesOrthogroup:
> > named_scope ortholog_groups_for { |g| { :include => :gene, :conditions
> > => ['genes.species_id != ?', g.species_id] } }
>
> > (not tested, but should be close to working)
>
> > A couple general things:
>
> > - model names should be singular (GenesOrthogroup rather than
> > GenesOrthogroups). Otherwise you'll eventually run into issues.
>
> > - when writing SQL fragments in conditions, table names are plural (so
> > genes.whatever rather than gene.whatever).
>
> > - the association macros have sensible defaults, so you can leave some
> > options out. For instance, the :species association in Gene can be
> > simplified to 'belongs_to :species' - Rails will find the correct FK
> > (species_id) and class (Species).
>
> > --Matt Jones
>
> > On Jun 28, 8:07 pm,JohnWoods<[email protected]> wrote:
>
> > >   has_many :genes_orthogroups, :class_name => 'GenesOrthogroups' #
> > > join table model
> > >   has_many :orthogroups, :through => :genes_orthogroups
> > >   has_many :orthologs, :through => :orthogroups, :source
> > > => :genes, :conditions => 'gene.species_id != ortholog.species_id'
> > > end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to