fieldname有'?'的问题

Sal*_*lil 2 ruby mysql boolean ruby-on-rails

我有一个'用户'表,其字段名称为'process_salary?' 它有一个布尔数据类型

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

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

NoMethodError: undefined method `process_salary?' for #<User:0xb6ac2f68>
Run Code Online (Sandbox Code Playgroud)

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

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

cel*_*tex 5

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

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