Question

I'm moving an old application from rails 2.3.2 to 2.3.18, ruby 1.8.7-p72 to 1.8.7-p374. (and then after that, to ruby 1.9.3 and rails 3)

My first query I tried which should be simple is giving me problems. In the console:

?> User.find(:all, :joins => { :sms_users => :join_smsuser_campaigns }, 
                   :conditions => { :sms_users => {
                                        :join_smsuser_campaigns => {
                                            :campaign_id => 18 } } })

Looks pretty straightforward?

It's giving me:

ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2363:in `sanitize_sql_hash_for_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2079:in `map'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `each'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `map'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `sanitize_sql_hash_for_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2361:in `sanitize_sql_hash_for_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2079:in `map'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `each'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `map'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `sanitize_sql_hash_for_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2274:in `sanitize_sql'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1528:in `merge_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1526:in `each'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1526:in `merge_conditions'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1838:in `add_conditions!'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1721:in `construct_finder_sql'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1582:in `find_every'
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:619:in `find'
    from (irb):6>>

Just to confirm I can actually make a User type:

?> User.find(1)
=> #<User id: 1, date_created: "2008-01-06 17:22:12", email: "email@example.com", name: "First Last", phone_number: "1234567890", last_communication: "2012-11-09 22:34:43">

So, it looks like I can create User objects.

Any idea why this simple query is failing? I've read the 2.3.18 activerecord documenation and it looks like my example is just like some of the example they show... Maybe I have a gem causing a problem? It's not evident from the stack trace.

Was it helpful?

Solution

Changing syntax for query worked for me:

users = User.find(:all, :joins => { :sms_users => :join_smsuser_campaigns },
    :conditions => { 'join_smsuser_campaigns.campaign_id' => session[:campaign_id].to_i},
    :order => 'join_smsuser_campaigns.conversation_status DESC, join_smsuser_campaigns.last_communication DESC, sms_users.id ASC')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top