Pat-
It is because it is a has_many :through => association. So there is a
buckets table, a buckets table and a bucket_lessons table. So, in 1.2,
when I indexed Lessons with an index of:
has buckets(:id), :as => :bucket_ids
TS would see that has_many_through association with buckets and set
things up accordingly. 1.3 does this as well, thus the configuration
file is generated without a problem.
But you TS tries to build the attribute name like so:
==============
def attribute_for_foreign_key
(@reflection.klass.sphinx_indexes || []).each do |index|
attribute = index.attributes.detect { |attrib|
attrib.columns.length == 1 &&
attrib.columns.first.__name == foreign_key.to_sym
}
============
It is only keying off of the column name. In 1.2, look at the same
code:
============
def attribute_for_foreign_key
(@reflection.klass.sphinx_indexes || []).each do |index|
attribute = index.attributes.detect { |attrib|
attrib.columns.length == 1 &&
attrib.columns.first.__name == foreign_key.to_sym &&
attrib.columns.first.__stack == stack
}
==========
It includes the stack, not just the column name, which helps TS
uniquely identify the table.
So my real question is, was this taken out on purpose? If so, it would
break any has_many_through associations for everyone it would seem.
Thanks for looking at this.
Greg
On Feb 24, 4:42 am, Pat Allan <[email protected]> wrote:
> Actually, now that I've investigated a bit further, I'm not sure how this
> ever worked out for you. If you're searching from @bucket.lessons, I would
> expect TS to try and match :bucket_lessons for the stack, and yet that's not
> referred to in the attribute you've defined.
>
> Maybe it's because it's late and my brain's unhappy that I'm yet to have
> dinner...
>
> Are you able to send me a copy of your app so I can try it locally? And why
> is bucket_lessons.bucket_id (for the attribute) not an ideal option?
>
> Cheers
>
> --
> Pat
>
> On 24/02/2010, at 8:06 PM, Pat Allan wrote:
>
>
>
> > Hi Greg
>
> > Sorry for not getting back to you sooner on this - it's definitely a bug.
> > There have been some changes with the associations search code, but this
> > was just to make it a little less fussy about determining the association's
> > attribute. It shouldn't have broken other situations, but obviously I made
> > a mistake, and it has.
>
> > I'll try to reproduce the issue locally and then fix it.
>
> > Cheers
>
> > --
> > Pat
>
> > On 20/02/2010, at 8:56 AM, Greg DeVore wrote:
>
> >> I saw some other messages on this but I think this problem is slightly
> >> different. Some background - have been using the TS plugin (version
> >> 1.2.9) and am now upgrading to 1.3.16. I am running rails 2.3.5 on Mac
> >> OS 10.5.
>
> >> Models
> >> ======
>
> >> class Lesson < ActiveRecord::Base
> >> has_many :bucket_lessons
> >> has_many :buckets, :through => :bucket_lessons
> >> end
>
> >> class BucketLesson < ActiveRecord::Base
> >> belongs_to :bucket
> >> belongs_to :lesson
> >> end
>
> >> class Bucket < ActiveRecord::Base
> >> has_many :bucket_lessons
> >> has_many :lessons, :through => :bucket_lessons
> >> end
>
> >> Lesson Index
> >> ==========
>
> >> has buckets(:id), :as => :bucket_ids
>
> >> The search call is:
>
> >> @bucket.lessons.search "string"
>
> >> This worked fine with version 1.2.9, but in 1.3.16 it throws the error
> >> "Missing Attribute for Foreign Key bucket_id"
>
> >> I added some logging into has_many_association.rb file in the
> >> 'attribute_for_foreign_key' method:
>
> >> Here is what is being logged:
> >> "COLUMNS are #{attrib.columns.inspect} AND
> >> #{attrib.columns.first.__name}"
>
> >> The results are:
> >> [#<ThinkingSphinx::Index::FauxColumn:0x7452228 @name=:id,
> >> @stack=[:buckets]>] AND id
>
> >> In version 1.2.9 TS would combine the stag and name to check the
> >> foreign key. But in 1.3.16 it is just checking the name which is
> >> incorrect. Therefore it never finds the bucket_id foreign key.
>
> >> By changing the index I can get it to work.
>
> >> has bucket_lessons(:bucket_ids), :as => :bucket_ids
>
> >> But that it not ideal.
>
> >> Was this a deliberate change in the upgrade to 1.3 or is this a bug?
>
> >> Greg DeVore
> >> Blue Mango Learning Systems
>
> >> --
> >> 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
> >> athttp://groups.google.com/group/thinking-sphinx?hl=en.
>
> > --
> > 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
> > athttp://groups.google.com/group/thinking-sphinx?hl=en.
--
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.