【发布时间】:2015-12-04 16:37:11
【问题描述】:
我有一个食谱模型和一个成分模型。成分belongs_to 食谱和食谱has_many 成分。一切正常。正在更新嵌套属性。
但是我的嵌套模型上有一个属性,我想在它存储到数据库之前对其进行操作。我在 IngredientsController 更新方法中有代码来处理这个问题。
我期待RecipeController 的更新方法会在更新嵌套的成分时调用成分控制器的更新方法。这显然不会发生。
在更新过程中我可以使用什么机制来操作嵌套模型对象?
更多细节: 我将成分数量作为浮点数存储在数据库中 (1.25、0.33333、3.5、4.0 等)。 我希望用户能够看到和编辑值作为一个草率的分数 (1 1/4、1/3、3 1/2、4)。
所以我编写了 String.to_f_sloppy 和 Float.to_s_sloppy 函数来处理数字。在展示上,没有问题,我只是使用了 ingredients.quantity.to_s_floppy。但是当有人编辑成分并改变数量时,当它到达 before_update 和 before_validation 函数时,值已经改变了(就像它通过 to_f 运行一样)。
以下是通过的参数: 参数:{"utf8"=>"√", "authenticity_token"=>"ojOwp68P3ObiufowfKtbfYxpV31+vZPz64qYQAL/1ld8Px93OrDX2Gvy/yxljENJOhiLW3DUoE0C2upvHuF3CA==", "recipe"=>{"user_id"=>"1", "name"=>" Chicken Piccata", "description"=>"", "category"=>"entre", "yield"=>"4.0", "ingredients_attributes"=>{"0"=>{"recipe_id"=>"12", "name"=>"去皮去骨鸡胸肉", "unit_id"=>"40", “数量”=>“2 1/2”, "评论"=>"", "_destroy"=>"0", "id"=>"122"}}}, "commit"=>"保存配方", "id"=>"12"}
在成分.rb 中,我有:
class Ingredient < ActiveRecord::Base
belongs_to :unit
belongs_to :recipe
before_update :translate_quantity
def translate_quantity
puts "UPDATE QUANTITY IS #{self.quantity}"
end
end
这输出: 更新数量为 2.0
所以在我得到这个值之前,它已经被改变了。
【问题讨论】:
标签: ruby-on-rails model nested-attributes