我有一个Upload
ActiveModel类,它有一个属性:filename
。由于只有一个属性,因此在表单中将该字段留空会导致在我的控制器中使用以下代码时出现错误:
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'
有没有更好的方法来处理用户没有填写任何表单属性?
答案 0 :(得分:9)
我在发布问题后立即找到the answer的数据。 :)
看起来ActionController::StrongParameters#fetch
方法可以满足所需要的条件,例如:
params.fetch(:upload, {}).permit(:filename)