Hi Greg
Here's the method in Thinking Sphinx that does the translation of values:
def underlying_value(key, value)
case value
when Array
value.collect { |item| underlying_value(key, item) }
when String
value.to_crc32
else
value
end
end
I reckon the easiest solution is just to re-create it as a class method and use
that.
As for auto-appending _facet, that *is* provided by TS in a reasonably open way:
ThinkingSphinx::Facet.name_for(:size)
Hope this helps dry things up a bit.
--
Pat
On 02/02/2011, at 11:03 PM, Greg wrote:
> I have just run into further difficulty with this.
>
> To clarify by way of example, what I would like to achieve is the
> equivalent to the following by using scopes:
>
>> @facets = Items.facets
>> @items = @facets.for(:size => 'Medium', :colour => ['Red', 'Green', 'Blue'])
>
> This is what I have so far:
>
> sphinx_scope(:by_size) do |size|
> {:with => {:size_facet => size.to_crc32}}
> end
>
> sphinx_scope(:by_colour) do |colour|
> {:with => {:colour_facet => colour.to_crc32}}
> end
>
> The above works fine when called with a single value, e.g.
>> Items.by_size('Medium').by_colour('Red')
>
> However, passing an array of values causes a problem:
>> Items.by_size('Medium').by_colour( ['Red', 'Green', 'Blue'] )
>> NoMethodError: undefined method `to_crc32' for ["Red", "Green", "Blue"]:Array
>
> I guess I need to use the 'collect' method on the array and 'to_crc32'
> each string individually. This is all starting to get very messy and
> unDRY.
>
> Getting back to my original question: The 'for' method provided by TS
> handles CRC32ing (including array handling) and the appending of
> '_facet' to the attribute name automatically. Is it possible to
> utilise this logic within a sphinx_scope rather than re-writing the
> functionality from scratch?
>
> Many thanks
> Greg
>
> --
> 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.