Hi Enrico

The issue here is your custom finder - Thinking Sphinx can't extract that into 
a join that it needs for the SQL query that pulls all the relevant data 
together for Sphinx.

The sad, short answer is: you can't use associations in your define_index block 
if they have a :finder_sql option.

-- 
Pat

On 31/07/2011, at 5:53 PM, enrico wrote:

> Hi guys,
> I am seeing:
> undefined method `eq' for nil:NilClass
> when I run:
> rake ts:rebuild [1]
> 
> The application where I am trying to use Sphinx has the following
> tables:
> Product(id, name, price)
> Store(id, name, product_group_id)
> ProductGroup(id, name)
> ProductGroupProducts(product_group_id, product_id)
> 
> 
> Inside product.rb I have:
> 
>      has_many :stores, :finder_sql => proc { "SELECT stores.*\n
>                                        FROM stores\n
>                                        INNER JOIN
> product_groups_products ON product_groups_products.product_id =
> #{self.id} AND stores.product_group_id =
> product_groups_products.product_group_id" }
> 
> And inside define_index:
> 
> has stores(:id), :as => :store_ids
> 
> I am putting together a sandbox app to debug this problem in
> isolation.
> 
> I've debugged the source code trying to find the cause of the problem,
> but not much luck. I am new with sphinx so let me know if this is not
> the right approach. What I ideally would like to do is this:
> 
> Product.search('coke', :with => { :store_ids => [@my_store.id] })
> 
> Thanks in advance.
> Enrico
> 
> [1]
> Generating Configuration to /Users/enricoant/code/myshop/config/
> development.sphinx.conf
> rake aborted!
> undefined method `eq' for nil:NilClass
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activesupport-3.0.9/lib/active_support/whiny_nil.rb:48:in
> `method_missing'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/associations.rb:2210:in
> `association_join'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation/query_methods.rb:259:in
> `build_joins'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation/query_methods.rb:254:in
> `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation/query_methods.rb:254:in
> `build_joins'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation/query_methods.rb:176:in
> `build_arel'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation/query_methods.rb:149:in
> `arel'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/relation.rb:321:in `to_sql'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/source/sql.rb:29:in `to_sql'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/source.rb:117:in `set_source_sql'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/source.rb:51:in `to_riddle_for_core'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/index.rb:114:in `to_riddle_for_core'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/
> activerecord-3.0.9/lib/active_record/connection_adapters/
> abstract_adapter.rb:207:in `each_with_index'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/index.rb:113:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/index.rb:113:in `each_with_index'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/index.rb:113:in `to_riddle_for_core'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/index.rb:83:in `to_riddle'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/active_record.rb:245:in `to_riddle'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/active_record.rb:244:in `collect'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/active_record.rb:244:in `to_riddle'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/configuration.rb:164:in `generate'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/configuration.rb:161:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/configuration.rb:161:in `generate'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/configuration.rb:177:in `build'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/tasks.rb:78
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:205:in `call'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:205:in `execute'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:200:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:200:in `execute'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:158:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/monitor.rb:
> 242:in `synchronize'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:151:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:144:in `invoke'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@myshop/gems/thinking-
> sphinx-2.0.5/lib/thinking_sphinx/tasks.rb:95
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:205:in `call'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:205:in `execute'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:200:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:200:in `execute'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:158:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/monitor.rb:
> 242:in `synchronize'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:151:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:176:in `invoke_prerequisites'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:174:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:174:in `invoke_prerequisites'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:157:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/monitor.rb:
> 242:in `synchronize'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:151:in `invoke_with_call_chain'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/task.rb:144:in `invoke'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:112:in `invoke_task'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:90:in `top_level'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:90:in `each'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:90:in `top_level'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:129:in `standard_exception_handling'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:84:in `top_level'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:62:in `run'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:129:in `standard_exception_handling'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/lib/
> rake/application.rb:59:in `run'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.9.2/bin/
> rake:32
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/bin/rake:19:in
> `load'
> /Users/enricoant/.rvm/gems/ruby-1.8.7-p334@global/bin/rake:19
> 
> -- 
> 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.
> 

-- 
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