문제

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.

도움이 되었습니까?

해결책

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')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top