Rails7 ActiveStorage多附件参数报错:ArgumentError参数数量不符
解决Rails 7 ActiveStorage多文件上传参数许可报错问题
错误根源
你在order_params中的参数许可写法不符合Ruby语法规范: :files [], 这行代码会被Ruby解析为调用符号:files的[]实例方法,而该方法要求传入1-2个参数,你未传递任何参数,因此触发ArgumentError (wrong number of arguments (given 0, expected 1..2))错误。
修复方案
将参数许可中的数组参数声明改为Rails支持的正确格式,两种写法任选其一:
写法一(Ruby 1.9+ 哈希语法,推荐)
def order_params params.require(:order).permit( # 其他已许可参数... files: [], # 其他已许可参数... ) end
写法二(老式哈希语法)
def order_params params.require(:order).permit( # 其他已许可参数... :files => [], # 其他已许可参数... ) end
额外优化
从请求参数中可以看到,files数组包含一个空字符串"",这是因为file_field在未选择文件时会提交空值。你可以在参数许可后过滤掉空值,避免无效数据进入模型:
def order_params params.require(:order).permit( # 其他已许可参数... files: [] ).tap do |whitelisted| # 过滤掉files数组中的空值 whitelisted[:files] = whitelisted[:files].reject(&:blank?) end end
内容的提问来源于stack exchange,提问作者malditojavi
相关产品推荐
相关产品推荐

