fieldname有'?'的问题

时间:2011-07-05 09:01:07

标签: mysql ruby-on-rails ruby boolean

我有一个'用户'表,其字段名称为'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>

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

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

2 个答案:

答案 0 :(得分:5)

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

旁注:'rails console'非常适合玩弄模型。

答案 1 :(得分:1)

随着cellcortex发布,列名末尾的问号在Rails中很棘手。如果由于遗留原因需要在那里使用它,您可以按如下方式访问该属性:

@user['process_salary?']

或者更详细:

@user.read_attribute['process_salary?']

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