【问题标题】:How to add custom strong params in rails 5如何在 Rails 5 中添加自定义强参数
【发布时间】:2017-10-09 07:54:48
【问题描述】:

我希望我的服务器在调用控制器更新操作时更新模型参数 (layout_is_public)。不过,该参数不应由用户直接更新。

我的控制器强参数:

def allowed_params
  params.require(:payload).permit(:name, :layout_id)
end

我在同一个控制器中的 before_action:

def correct_layout
  if allowed_params[:layout_id].present?
    puts allowed_params.merge(layout_is_public: false).inspect

    # puts output is as expected:
    # => <ActionController::Parameters {"layout_id"=>1, "layout_is_public"=>false} permitted: true>

    allowed_params = allowed_params.merge(layout_is_public: false)
  end
end

我不知道如何更新我的 allowed_pa​​rams 以包含新生成的参数。

我也不确定该操作是否真的应该在控制器或模型本身中执行。任何帮助将不胜感激:)

注意:为了简洁起见,layout_is_public 变量在这里设置为 false。

【问题讨论】:

    标签: ruby-on-rails validation ruby-on-rails-5


    【解决方案1】:

    你也可以试试这个:-

    private
    
    def allowed_params
      ap = params.require(:payload).permit(:name, :layout_id)
      ap[:layout_is_public] = 'false' if params[:payload][:layout_id].present?
      ap
    end
    

    【讨论】:

      【解决方案2】:

      您不能直接指定 strong 参数。将其分配给变量并合并参数。

         def correct_layout
            if allowed_params[:layout_id].present?
              puts allowed_params.merge(layout_is_public: false).inspect
              # puts output is as expected:
              # => <ActionController::Parameters {"layout_id"=>1,  layout_is_public"=>false} permitted: true>
              allowed = allowed_params
              allowed_params = allowed.merge(layout_is_public: false)
            end
          end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-24
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多