【问题标题】:Rails, add strong param with controller to every param requireRails,为每个需要的参数添加带有控制器的强参数
【发布时间】:2015-09-28 09:38:13
【问题描述】:

我有一个简单的 rails 嵌套属性参数,我想知道是否有可能在更新/创建之前添加我自己的值。 就像一行:

: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

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

【问题讨论】:

    标签: ruby-on-rails associations rails-activerecord strong-parameters


    【解决方案1】:

    型号

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

    【讨论】:

    • 保持私密是一种完美的方法
    【解决方案2】:

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

    before_commit :set_approved_terms_time
    
    def set_approved_terms_time
       approved_terms_time = DateTime.now
    end
    

    【讨论】:

    • 这是最有效的答案
    【解决方案3】:

    你也可以这样做:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多