2015-12-04 79 views
0

我有一個食譜模型和一個成分模型。成分belongs_to食譜和食譜has_many成分。一切工作正常。嵌套屬性正在更新。Rails嵌套模型更新不使用子控制器。什麼被稱爲?

但我有我的嵌套模型上的一個屬性,我想操縱之前,它被存儲在數據庫中。我有IngredientsController更新方法中的代碼來處理這個問題。

我期待RecipeController的update方法在更新嵌套的Ingredients時調用IngredientController的update方法。這顯然不會發生。

在更新過程中,我可以使用什麼機制來操縱嵌套模型對象?

更多詳細信息: 我將成分數量作爲浮點數存儲在數據庫中 (1.25,0.333333,3.5,4.0等)。 我希望用戶能夠看到並編輯該值作爲馬虎分數 (1 1/4,1/3,3 1/2,4)。

所以我寫了String.to_f_sloppy和Float.to_s_sloppy函數來操縱數字。在展示上,沒有問題,我只是使用ingredient.quantity.to_s_floppy。但是,當某人編輯配料並更改數量時,當它到達before_update和before_validation函數時,該值已經更改(如運行到to_f)。

下面是來通過參數: 參數:{ 「UTF8」=> 「√」, 「authenticity_token」=> 「ojOwp68P3ObiufowfKtbfYxpV31 + vZPz64qYQAL/1ld8Px93OrDX2Gvy/yxljENJOhiLW3DUoE0C2upvHuF3CA ==」, 「配方」=> {「USER_ID 「=>」1「,」name「=>」Chicken Piccata「,」description「=>」「,」category「=>」entree「,」yield「=>」4.0「, 」ingredients_attributes「=> { 「0」=> {「recipe_id」=>「12」, 「name」=>「去皮無骨雞胸肉」, 「unit_id」=>「40」, 「quantity」=>「2 1/2 「, 」comment「=>」「, 」_destroy「=>」0「,」id「=>」122「}}},」commit「=>」Save Recipe「,」id「=>」12 「}

在i ngredients.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

所以我纔可以得到的價值,它已經改變。

回答

0

您可以使用Activerecord的回調函數,這些回調函數在模型上實現,它允許您使用它們修改記錄。

你想要的那個是before_update回調。

更多信息here

就是這樣。

class Ingredient < ActiveRecord::Base 
    ... 
    before_update :stuff 

    private 
    def stuff 
     # do stuff 
    end 
end 
+0

我嘗試這樣做。請參閱上面的MORE INFO部分,瞭解它爲什麼似乎沒有幫助。 – mjenkins

相關問題