Pat-
Third times a charm I hope....stupid google groups.
It looks like you are hooking in the thinking_sphinx callback with the
before_validation hook.
starts at line 169 of of active_record.rb in lib/thinking_sphinx
It looks like this:
if sphinx_index_blocks.empty?
before_validation :define_indexes
before_destroy :define_indexes
end
The issue is the index stuff is never hooked in on an update_attribute
since it never calls the validations. update_attribute calls save(false)
while update_attributes calls save with no false.
Anyway to hook in the index stuff without using before_validation?
Thanks.
Erik
On Thursday, June 7, 2012 11:27:53 AM UTC-7, Pat Allan wrote:
>
> Hmm, I thought update_attribute didn't fire callbacks - but it turns out
> it does. Not sure if it's always been that way or it's a relatively new
> change, but good to know, I guess. Albeit it removes a reason for this
> inconsistency, so I'm unsure why it's only happening sometimes.
>
> As for the process for deltas generally, in relation to the delta column:
> * When a record is added/edited, it has delta set to true.
> * The delta remains set to true until the next full index, at which point
> it's set to false and remains set to false, unless the record is later
> changed again.
>
> Hope this helps, although it doesn't answer why update_attribute is only
> firing off the delta indexing only sometimes. Have you got a set of
> commands that reliably run without the delta indexing happening?
>
> --
> Pat
>
> On 07/06/2012, at 5:45 PM, elanderholm wrote:
>
> > Hi Pat-
> >
> > It does run the delta if i do update_attributes.
> >
> > ## Sphinx
> > define_index do
> > indexes :name, :as => :name, :sortable => true
> > indexes makes.name, :as => :makes_name
> > indexes zip_code.zip_code, :as => :zip_code
> > indexes zip_code.city_name, :as => :city
> > indexes zip_code.state_name, :as => :state_name
> > indexes zip_code.state_abbr, :as => :state_abbr
> >
> > indexes :created_at, :sortable => true
> >
> > has zip_code(:id), :as => :zip_code_id
> > has 'RADIANS(zip_codes.latitude)', :as => :latitude, :type
> > => :float
> > has 'RADIANS(zip_codes.longitude)', :as => :longitude, :type
> > => :float
> > has makes(:id), :as => :makes_id
> > has disabled, :as => :disabled, :type
> > => :boolean
> > has number_of_offers_made, :as => :offer_count, :type
> > => :integer
> > has total_time_of_last_x_offers, :as => :time_to_offer, :type
> > => :integer
> >
> > set_property :latitude_attr => "latitude"
> > set_property :longitude_attr => "longitude"
> > set_property :delta => true
> > end
> >
> > Though it seems like sometimes it does work with just
> > update_attribute. It's almost like it works or it doesn't for all the
> > objects. But, if it starts working then it works fine until I open a
> > new console. I guess what I'm trying to say is it's not consistent.
> > It's not like update_attribute never works by itself. Also, once I
> > run an update_attributes then update_attribute works.
> >
> > Also, is this the proper behavior.
> > If I use update_attributes to change the name for example, it changes
> > the delta from false to true. It's false after running rake ts:index
> > for instance. Then the rotate runs and the delta stays true? Is that
> > correct? When it doesn't work the delta stays false and never toggles
> > to true.
> >
> > thanks.
> > Erik
> >
> > On Jun 7, 1:48 am, "Pat Allan" <[email protected]> wrote:
> >> Hi Erik
> >>
> >> Can you show us your index definition? Also, does it work if you run
> update_attributes, as opposed to update_attribute (plural, not singular)?
> >>
> >> --
> >> Pat
> >>
> >> On 07/06/2012, at 4:52 AM, elanderholm wrote:
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>> I'm going to do my best to describe what is going on here with all the
> >>> detail I can muster! :)
> >>
> >>> First the gist. When I do object.update_attribute...index_delta does
> >>> not run. More then that if I do Class.index_delta(self) it can't find
> >>> index_delta. It does not respond_to? it.
> >>
> >>> If I do object.update_attributes it works fine. It runs the
> >>> index_delta after_commit.
> >>
> >>> I even went as far as to create my own after commit that looked
> >>> something like
> >>
> >>> after_commit do
> >>> Class.index_delta(self)
> >>> end
> >>
> >>> and i get a no_method error for the Class if I do update_attribute.
> >>> If i do update_attributes it actually ends up rotating the indexes
> >>> twice. Once from the thinking_sphinx code and once from my
> >>> after_commit.
> >>
> >>> I'm using
> >>> Rails 3.2
> >>> gem 'thinking-sphinx', '~> 2.0.12'
> >>> Sphinx 0.9.9-release (r2117)
> >>
> >>> Thanks
> >>> Erik
> >>
> >>> --
> >>> 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.
> >
>
>
>
--
You received this message because you are subscribed to the Google Groups
"Thinking Sphinx" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/thinking-sphinx/-/Fkj5sjrAPiAJ.
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.