【问题标题】:Rails 3 ActiveRecord Migration - ActiveRecord::StatementInvalidRails 3 ActiveRecord 迁移 - ActiveRecord::StatementInvalid
【发布时间】:2013-07-03 01:10:07
【问题描述】:

我收到一个奇怪的错误:

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,我可以很好地将该查询泵入数据库。

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

请指教。

谢谢

【问题讨论】:

  • 在第一个查询中,您将其称为 rivileges.vendor_id WHERE。是错字吗?

标签: ruby-on-rails-3 activerecord


【解决方案1】:

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]

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2018-03-08
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多