1

我有嵌套屬性PARAMS一個簡單的軌道,我想知道是否有可能更新之前添加自己的價值/創建。 像行:Rails的,與控制器添加強大的參數去每PARAM要求

:approved_terms_time => DateTime.now 

def post_params 
    params.require(:post).permit(:title, :content, user_attributes: [:id, :approved_terms, :approved_terms_time => DateTime.now]) 
end 

我當然可以在創建\更新這樣做:

@user.approved_terms_time = DateTime.now 

但我想知道是否有一個更優雅的方式:)

回答

2

型號

爲了增加@Arpit Vaishnav的答案,這種類型的過程中應提取到model之前更新。您要添加的數據不依賴於輸入,因此可以添加不受懲罰的內容。

有許多的ActiveRecord callbacks它爲您提供一個副手的方式來操縱你要添加到您的模型數據。

我會親自使用before_create

#app/models/post.rb 
class Post < ActieRecord::Base 
    before_create :set_terms_time 

    private 

    def set_terms_time 
     approved_terms_time = DateTime.now 
    end 
end 
+0

飼養私下是一個完美的方法 –

0

你也可以這樣做:

def update_user 
    resource_params.merge(user_id: current_user.id) 
end 

但我認爲AR回調usag e是最乾淨和最好的解決方案。

1

另外,在模型中,您也可以創建回叫。創建或更新任何行,每次,這個領域將犯任何語句

before_commit :set_approved_terms_time 

def set_approved_terms_time 
    approved_terms_time = DateTime.now 
end 
+0

這是最有效的答案 –