【问题标题】:Problem with fieldname having '?'字段名有“?”的问题
【发布时间】:2011-09-28 15:23:07
【问题描述】:

我有一个字段名称为“process_salary”的“用户”表?具有布尔数据类型

@user = User.create(params[:user])
if @user.process_salary? 
 //some code here 
else
 //some code here 
end

当我创建一个新的用户对象并检查 process_salary 时,它给了我以下错误

NoMethodError: undefined method `process_salary?' for #<User:0xb6ac2f68>

为什么会出现这个错误?我可以在不更改列名的情况下避免它吗?

当我用调试器检查它时,它第一次崩溃,但之后它运行正常

【问题讨论】:

    标签: mysql ruby-on-rails ruby boolean


    【解决方案1】:

    问号在 ActiveRecord 中有特殊的含义。它可以用来检查一个字段是否为真。您将其用作字段名称的一部分,这不是一个好主意。你可以试试@user.process_salary??存在,但我认为最终将您的数据库列更改为“process_salary”是最简单的。

    旁注:“rails 控制台”对于玩模型非常有帮助。

    【讨论】:

    • Ruby 不允许@user.process_salary?? 不棘手(例如@user.send(:"process_salary??"))
    【解决方案2】:

    正如 cellcortex 发布的那样,列名末尾的问号在 Rails 中很棘手。如果您出于遗留原因需要将其放在那里,您可以按如下方式访问该属性:

    @user['process_salary?']
    

    或更详细的:

    @user.read_attribute['process_salary?']
    

    您当然可以使用 .nil 来测试 nil?。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2021-09-30
      • 2019-02-10
      • 2011-06-01
      相关资源
      最近更新 更多