2013-09-05 71 views
0

我有一個控制器,我想在更新之前更新其中一個參數的值,以便更新在與數據庫相同的保存中執行。不幸的是,下面的代碼沒有設置z數據庫:在Ruby on Rails控制器中更新參數

if @model.x == "YES" && @model.z.blank? 
    model_params[:z] = Time.now 
end 
@model.update_attributes(model_params) 

def model_params 
    params.require(:model).permit(:x, :y, :z) 
end 

回答

5

這應做到:

def update 
    attributes = model_params.clone 
    if @model.x == "YES" && @model.z.blank? 
    attributes[:z] = Time.now 
    end 
    @model.update_attributes(attributes) 
end 

def model_params 
    params.require(:model).permit(:x, :y, :z) 
end 

您的代碼並沒有在首位的工作,因爲調用model_params調用該方法,而不是實際的局部變量。您需要創建返回的哈希的克隆並將其用於update_attributes。

+0

你得到了第一個答案,但是你錯過了一個很好的機會來解釋發生了什麼(你已經編輯過)或者改進了代碼。 – coreyward