Rails,为每个参数要求添加带控制器的强参数

Rails, add strong param with controller to every param require

我有一个简单的 rails 嵌套属性参数,我想知道是否可以在 update/create 之前添加我自己的值。 就像在行中:

: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

我当然可以在Create\update:

@user.approved_terms_time = DateTime.now

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

你也可以这样做:

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

但我认为 AR-callbacks 的使用是最干净、最好的解决方案。

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

之前更新
before_commit :set_approved_terms_time

def set_approved_terms_time
   approved_terms_time = DateTime.now
end

型号

要添加到 @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