2013-11-25 76 views
0

我將舊的應用程序從rails 2.3.2移動到2.3.18,ruby 1.8.7-p72到1.8.7-p374 。 (然後在那之後,以紅寶石1.9.3和導軌3)從rails 2.3.2升級到2.3.18,在簡單查詢中給出ActiveRecord :: StatementInvalid

我第一次查詢我試過應該是簡單的給我的問題。在控制檯上:

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

看起來很簡單嗎?

它給我:

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>> 

只是爲了確認我其實可以做一個用戶類型:

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

所以,它看起來像我可以創建用戶對象。

任何想法爲什麼這個簡單的查詢失敗?我已閱讀2.3.18主動記錄文檔,它看起來像我的示例就像他們顯示的一些示例...也許我有一個導致問題的寶石?從堆棧跟蹤中看不出來。

回答

0

查詢更改語法爲我工作:

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') 
相關問題