Ruby on rails 3 Rails 3 ActiveRecord迁移-ActiveRecord::StatementInvalid

Ruby on rails 3 Rails 3 ActiveRecord迁移-ActiveRecord::StatementInvalid,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我得到一个奇怪的错误: ActiveRecord::StatementInvalid in AdminController#edit_user NoMethodError: undefined method `empty?' for 663:Fixnum: SELECT privileges.*, ... In: app/controllers/admin_controller.rb:75:in `edit_user' 下面是一行问题: #line #75 from admin_contro

我得到一个奇怪的错误:

ActiveRecord::StatementInvalid in AdminController#edit_user
NoMethodError: undefined method `empty?' for 663:Fixnum: SELECT privileges.*, ...

In: app/controllers/admin_controller.rb:75:in `edit_user'
下面是一行问题:

#line #75 from admin_controller.rb
@privileges = Privilege.find_by_sql( "SELECT privileges.*, vendors.name AS vendor_name FROM privileges LEFT JOIN vendors ON vendors.id = rivileges.vendor_id WHERE user_id = ?  ORDER BY vendors.name", @user.id)
我可以通过取出占位符来修复它,但我不想这样做:

@privileges = Privilege.find_by_sql( "SELECT privileges.*, vendors.name AS vendor_name FROM privileges LEFT JOIN vendors ON vendors.id = privileges.vendor_id WHERE b2b_user_id = "+@user.id.to_s+"  ORDER BY vendors.name")
在Rails 3中,find_by_sql并没有被弃用,我可以很好地将该查询输入数据库

对我来说奇怪的是,在我的管理员控制器中没有调用“empty?”。这是Rails对empty的内部调用吗

请告知


谢谢,Rails 3.1中已经不推荐使用这种语法

你应该打电话

@privileges = Privilege.find_by_sql ["SELECT privileges.*, vendors.name AS vendor_name FROM privileges LEFT JOIN vendors ON vendors.id = rivileges.vendor_id WHERE user_id = ?  ORDER BY vendors.name", @user.id]

在第一个查询中,您将其命名为rivileges.vendor\u id WHERE。那是打字错误吗?