我有一个具有一个属性的Upload ActiveModel类:filename。由于只有一个属性,因此在我的 Controller 中使用以下代码时,在表单上将该字段保留为空白最终会引发错误:

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

  private

  def upload_params
    params.require(:upload).permit(:filename)
  end
end

我想出的最好的解决方法是rescue方法中的upload_params,例如:
def upload_params
  params.require(:upload).permit(:filename) rescue ActionController::Parameters.new
end

另外,我想我可以添加一个隐藏字段,以确保filename字段始终设置为任何值,例如:
= simple_form_for upload do |f|
  = f.input :filename, as: :hidden, input_html: { value: '' }
  = f.input :filename, as: :file
  = f.submit 'Upload'

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

最佳答案

发布问题后立即找到the answer的数字。 :)

看起来ActionController::StrongParameters#fetch方法完成了所需的操作,例如:

params.fetch(:upload, {}).permit(:filename)

关于ruby-on-rails - 使用StrongParameters处理缺少的必需参数的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24337458/

10-13 02:37