Ruby on rails Rails-将模型值设置为零
尝试将模型中的一个列值设置为nil时,Rail的ActiveRecord是否有任何特殊规则 freez方法中的健全性检查总是失败 模型:项目 列:非项目成本值(可为空的十进制字段)Ruby on rails Rails-将模型值设置为零,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,尝试将模型中的一个列值设置为nil时,Rail的ActiveRecord是否有任何特殊规则 freez方法中的健全性检查总是失败 模型:项目 列:非项目成本值(可为空的十进制字段) 您的freez方法中有一个bug non_project_costs_value = val # this is setting a local variable # (in the method freez) to val # change to: se
您的freez方法中有一个bug
non_project_costs_value = val # this is setting a local variable
# (in the method freez) to val
# change to:
self.non_project_costs_value = val # this will set the record's attribute
# (the column) to val
# It will be saved to the dbms once you save
您在哪里“将值设置为nil?您在调用类似@project.freez(nil)的东西?”?这是否意味着我的“froz”方法中也有一个bug?在这里,我使用非项目成本值而不是self.non\u项目成本值。不。原因是在你的froz?方法中没有名为non\u项目成本值的本地var。因此Ruby寻找一个非项目成本值的方法。它找不到,但ActiveRecord机制覆盖了““找不到方法”函数,注意到所需的方法(非项目成本值)是一个属性,然后提供该值。但如果将非项目成本值定义为局部变量(通过分配给它),则稍后引用非项目成本值(在同一名称范围内)将使用本地变量。文档讨论了这一点,但我刚才找不到一个好的参考。请参阅文档了解AR库
non_project_costs_value = val # this is setting a local variable
# (in the method freez) to val
# change to:
self.non_project_costs_value = val # this will set the record's attribute
# (the column) to val
# It will be saved to the dbms once you save