Ruby on rails Rails-将模型值设置为零

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

尝试将模型中的一个列值设置为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:
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