我有一个'用户'表,其字段名称为'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>
为什么会出现此错误?我可以在不更改列名的情况下避免使用它吗?
当我使用调试器检查它时,它第一次崩溃,但之后它正常运行
答案 0 :(得分:5)
问号在ActiveRecord中有特殊含义。它可用于检查字段是否为真。您正在使用它作为您的字段名称的一部分,这不是一个好主意。你可以尝试@ user.process_salary ??存在,但我认为最终将数据库列更改为'process_salary'是最容易的。
旁注:'rails console'非常适合玩弄模型。
答案 1 :(得分:1)
随着cellcortex发布,列名末尾的问号在Rails中很棘手。如果由于遗留原因需要在那里使用它,您可以按如下方式访问该属性:
@user['process_salary?']
或者更详细:
@user.read_attribute['process_salary?']
你当然可以使用.nil?来测试nil。