Hi Bradley

I guess the touch option doesn't fire update callbacks? Which is a little 
surprising, to be honest. What happens if you run 
`order.update_attributes(delta: true)` as an after_commit hook for your address?

-- 
Pat

On 20/08/2013, at 3:01 AM, Bradley Schaefer wrote:

> I'm having trouble with figuring out the proper way to configure indexes on a 
> Model using relations. I'd like to search for Orders by Customer Name, 
> however the name lives in separate model which Order has_one of. So my index 
> looking like so:
> 
> ThinkingSphinx::Index.define :order, with: :active_record, :delta => 
> ThinkingSphinx::Deltas::DelayedDelta do
>   join shipping_address
>   indexes "concat_ws(' ', addresses.first_name, addresses.last_name)",
>     as: :customer_name,
>     sortable: true,
>     infixes: true
> 
>   set_property enable_star: true
>   set_property min_infix_len: 2
> end
> 
> This works ok as far as indexing the proper information, however the delta 
> indexing only works if I modify an address instance through its order:
> 
> order = Order.first
> order.shipping_address.first_name = 'Boris'
> order.save # address model and order index get the expected updates
> 
> address = Address.first
> address.first_name = 'Natasha'
> address.save # address model gets updated, but now the Order index is out of 
> date
> 
> I can completely understand how this would be the expected behavior -- the 
> index is on Order, so it only knows to change if Order is changed. I tried a 
> couple of ways of forcing Address to save the model it belongs to, however 
> nothing works.
> 
> class Address
>   belongs_to :order, touch: true # the touch happens, but no delta index 
> hooks are called
> 
>   after_commit :save_order # infinite loop
> end
> 
> So that seems like a dead end. Then my thinking was to put the index on 
> address, but I'm not sure how I can combine the address index with searching 
> against other Order fields/attributes.
> 
> Order.joins(:shipping_address).where(shipping_address: { id: 
> Address.search('Boris').map(&:id) }) 
> # this doesn't seem right, even if there were no other Order search 
> fields/attributes. For one thing,
> # the address search could return addresses not corresponding to any order's 
> shipping address, 
> # and has pagination, so 20 of 200 address results could page 1 has 17 
> orders, and page 2 has 12, etc etc. 
> 
> Feels like I must be making things harder for myself somehow, but I can't see 
> what may be an obvious solution.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Thinking Sphinx" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/thinking-sphinx.
> For more options, visit https://groups.google.com/groups/opt_out.


-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/thinking-sphinx.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to