Mysql fieldname具有';的问题';

Mysql fieldname具有';的问题';,mysql,ruby-on-rails,ruby,boolean,Mysql,Ruby On Rails,Ruby,Boolean,我有一个字段名为“process\u salary?”的“user”表,它具有布尔数据类型 @user = User.create(params[:user]) if @user.process_salary? //some code here else //some code here end 当我创建一个新的user对象并检查process\u salary时,它会给我以下错误 NoMethodError: undefined method `process_salary?' f

我有一个字段名为“process\u salary?”的“user”表,它具有布尔数据类型

@user = User.create(params[:user])
if @user.process_salary? 
 //some code here 
else
 //some code here 
end
当我创建一个新的user对象并检查process\u salary时,它会给我以下错误

NoMethodError: undefined method `process_salary?' for #<User:0xb6ac2f68>
NoMethodError:for的未定义方法“处理工资”#
为什么会发生这种错误?我能在不更改列名的情况下避免它吗


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

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


旁注:“rails控制台”对于玩弄模型非常有用

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

@user['process_salary?']
或者更详细一些:

@user.read_attribute['process_salary?']

当然,您可以使用.nil?

Ruby不允许
@user.process\u salary???
而不会变得棘手(例如
@user.send(:“process\u salary??)