Hi there
Arrays of values for attribute updates should work fine - because they
shouldn't actually update (Sphinx doesn't allow it). Is there a reason why
you're saying each of those attributes is an integer, instead of using the
default type of multi-value attribute (MVA)? Thinking Sphinx should detect that
automatically, so there'd be no need to specify the type (if you had to,
though, it's :multi).
Cheers
--
Pat
On 21/06/2012, at 8:21 PM, Abdo Achkar wrote:
> Hello there =)
>
> I have the following:
>
> class Location < ActiveRecord::Base
> has_many :operation_intervals_locations
> has_many :operation_intervals, :through => :operation_intervals_locations
>
> define_index "location" do
> # indexes here...
>
> # tried this syntax
> has operation_intervals(:start_int), :type => :integer
> has operation_intervals(:end_int), :type => :integer
> has operation_intervals(:days_int), :type => :integer
>
> # and this one
> has operation_intervals.start_int, :type => :integer
> has operation_intervals.end_int, :type => :integer
> has operation_intervals.days_int, :type => :integer
> end
> end
>
>
> class OperationInterval < ActiveRecord::Base
> attr_accessible :start_int, :end_int, :days_int
> end
> I call Location.search("foo") to initialize the search
> Then I do l = Location.first; l.name = "bar"; l.save(:validate=> false)
> # joining is working just fine
> OperationInterval Load (0.3ms) SELECT `operation_intervals`.* FROM
> `operation_intervals` INNER JOIN `operation_intervals_locations` ON
> `operation_intervals`.`id` =
> `operation_intervals_locations`.`operation_interval_id` WHERE
> `operation_intervals_locations`.`location_id` = 1
>
> # here's where I'm getting my crash
> NoMethodError: undefined method `end_int' for
> #<ActiveRecord::Relation:0xe048450>
> from
> /usr/local/rvm/gems/ruby-1.9.3-p194@rails326/gems/activerecord-3.2.6/lib/active_record/relation/delegation.rb:45:in
> `method_missing'
> I tracked the bug and basically this is what I found out:
> In
> /usr/local/rvm/gems/ruby-1.9.3-p194@rails326/gems/thinking-sphinx-2.0.12/lib/thinking_sphinx/attribute.rb
>
> in def live_value , when object.send(method) is called, operation_intervals
> returns an array of operation intervals.
> When the last line is called ( sphinx_value object.send(column.__name) ) ,
> object doesn't have column.__name as attribute (object[0] does though) ...
> which leads to crashing.
> Adding this code stops the crash but I think data will be missing from the
> index:
> if (object.class == Array)
> object = object[0]
> end
>
> I JUST realized that operation_intervals(:days_int) 's type is not "integer"
> but should rather be "Array".
> Is there a way we can raise an exception in live_value before the last line
> if the type is an Array? This would have saved me a few hours looking for
> this bug =)
> Thank you very much!
>
> Best,
>
> A
>
>
>
>
>
> --
> 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/-/x69kzkpSCMEJ.
> 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.