如何在rails 5

时间:2017-10-09 07:54:48

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

我希望我的服务器在调用控制器更新操作时更新模型参数(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。

2 个答案:

答案 0 :(得分:0)

您也可以尝试这样做: -

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

答案 1 :(得分:0)

您无法直接指定强参数。将其分配给变量并合并参数。

   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