I'd love to but I can't figure out how to write a failing test for it at the
moment. I will try again later today.
On May 4, 2011, at 9:25 AM, Pat Allan wrote:
> Clemens - perhaps you can allow for this in your recent patch, so we get this
> fixed up at the same time?
>
> --
> Pat
>
> On 04/05/2011, at 5:23 PM, Clemens Kofler wrote:
>
>> The more performant way would be to call compact on the array resulting from
>> the collect:
>>
>> def translate(object, attribute_value)
>> objects = source_objects(object)
>> return nil if objects.nil? || objects.empty?
>>
>> if objects.length > 1
>> objects.collect { |item| item.send(column.__name) }.compact.detect { |
>> item|
>> item.to_crc32 == attribute_value
>> }
>> else
>> method = value_source || column.__name
>> objects.first.send(method)
>> end
>> end
>>
>> Otherwise (in the worst case scenario where the detect hits for the last
>> element or not at all) you'd have to iterate the same (potentially large
>> collection) twice.
>>
>> - C.
>>
>> On May 4, 2011, at 1:36 AM, Alex Chee wrote:
>>
>>> I'm trying to make a facet from a string column that might contain
>>> NULL. When it gets to the translate method, it tries to call to_crc32
>>> on nil:
>>>
>>> NoMethodError: undefined method `to_crc32' for nil:NilClass
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/
>>> activesupport-3.0.6/lib/active_support/whiny_nil.rb:48:in
>>> `method_missing'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:106:in `block in
>>> translate'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `each'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `detect'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `translate'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:81:in `value'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:127:in `block
>>> in add_from_results'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:322:in `block in
>>> each_with_match'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in `each'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in
>>> `each_with_index'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in
>>> `each_with_match'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:126:in
>>> `add_from_results'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:52:in `block
>>> in populate'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in `each'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in
>>> `each_with_index'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in
>>> `populate'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:13:in
>>> `initialize'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search_methods.rb:422:in `new'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
>>> sphinx-f81441e28813/lib/thinking_sphinx/search_methods.rb:422:in
>>> `facets'
>>> from (irb):1
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
>>> lib/rails/commands/console.rb:44:in `start'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
>>> lib/rails/commands/console.rb:8:in `start'
>>> from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
>>> lib/rails/commands.rb:23:in `<top (required)>'
>>> from script/rails:6:in `require'
>>> from script/rails:6:in `<main>'irb(main):002:0>
>>>
>>> So I'm trying to get around this by changing the translate method to
>>> only collect if the item is not nil and the crc32 matches, like:
>>> def translate(object, attribute_value)
>>> objects = source_objects(object)
>>> return nil if objects.nil? || objects.empty?
>>>
>>> if objects.length > 1
>>> objects.collect { |item| item.send(column.__name) }.detect { |
>>> item|
>>> !item.nil? && item.to_crc32 == attribute_value
>>> }
>>> else
>>> method = value_source || column.__name
>>> objects.first.send(method)
>>> end
>>> end
>>>
>>> Does anyone know if this sounds like reasonable solution for me?
>>>
>>> Thanks,
>>> -Alex
>>>
>>> --
>>> 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.
>>
>
> --
> 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.