Ruby on rails Rails,为每个参数添加带控制器的强参数

Ruby on rails Rails,为每个参数添加带控制器的强参数,ruby-on-rails,associations,rails-activerecord,strong-parameters,Ruby On Rails,Associations,Rails Activerecord,Strong Parameters,我有一个简单的rails嵌套属性params,我想知道是否有可能在更新/创建之前添加我自己的值。 比如说: :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 我当然

我有一个简单的rails嵌套属性params,我想知道是否有可能在更新/创建之前添加我自己的值。 比如说:

: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

但我想知道是否有更优雅的方式:

你也可以这样做:

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

但我认为AR回调使用是最干净、最好的解决方案

此外,在模型中,您也可以创建回拨。每次创建或更新任何行时,此字段将在提交任何stmt之前更新

before_commit :set_approved_terms_time

def set_approved_terms_time
   approved_terms_time = DateTime.now
end
模型

要添加到@Arpit Vaishnav的答案中,应将此类流程提取到模型中。您添加的数据不依赖于输入,因此可以不受惩罚地添加

有许多方法为您提供了一种简便的方法来操作您希望添加到模型中的数据

在创建之前,我会亲自使用:


这是最有效的回答。私下保持是一个完美的方法
#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