使用StrongParameters处理缺少必需参数的最佳方法?

Mat*_*ins 8 ruby-on-rails strong-parameters ruby-on-rails-4

我有一个UploadActiveModel类,它有一个属性:filename.由于只有一个属性,因此在表单中将该字段留空会导致在我的控制器中使用以下代码时出现错误:

class UploadsController < ApplicationController
  def create
    @upload = Upload.new(upload_params)
    # ...
  end

  private

  def upload_params
    params.require(:upload).permit(:filename)
  end
end
Run Code Online (Sandbox Code Playgroud)

我提出的最好的解决方法是rescueupload_params方法中,例如:

def upload_params
  params.require(:upload).permit(:filename) rescue ActionController::Parameters.new
end
Run Code Online (Sandbox Code Playgroud)

或者,我想我可以添加一个隐藏字段,以确保该filename字段始终设置为某种东西,无论如何,例如:

= simple_form_for upload do |f|
  = f.input :filename, as: :hidden, input_html: { value: '' }
  = f.input :filename, as: :file
  = f.submit 'Upload'
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理用户没有填写任何表单属性?

Mat*_*ins 9

我在发布问题后立即找到答案的数字.:)

看起来该ActionController::StrongParameters#fetch方法可以满足需要,例如:

params.fetch(:upload, {}).permit(:filename)
Run Code Online (Sandbox Code Playgroud)