Techioz Blog

引数の数が間違っています (指定された値は 1、期待値は 0、必須キーワード: io、ファイル名) - Active Storage

概要

Rails バージョンを 7.1.2 にアップグレードした後、アクティブ ストレージで問題が発生しました。このコードを実行しようとしています:

banner = Banner.new
img_url = "https://t3.ftcdn.net/jpg/04/75/78/56/360_F_475785604_HDtTcxBFA0Av87F7JoFmpircCcatQ22b.jpg"
picture = URI.open(img_url, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})
banner.img_v2.attach(io: picture, filename: File.basename(picture), key: "banners/v2/#{File.basename(picture)}.png")
banner.save

そして、banner.saveまたはbanner.img_v2.urlで次のエラーが発生します。

/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activestorage-7.1.2/app/models/active_storage/blob.rb:87:in `build_after_unfurling': wrong number of arguments (given 1, expected 0; required keywords: io, filename) (ArgumentError)

この問題は私に最も近いものを見つけましたが、役に立ちませんでした。助けや提案をしていただきありがとうございます。

解決策

Rails 6と互換性のあるアクティブストレージのイニシャライザを使用していることがわかりました。ソースコードと解決策はここで見つけます。

エラーは次の行から発生します。

when Hash
  ActiveStorage::Blob.build_after_unfurling({ metadata: { acl: acl } }.deep_merge(attachable))

修正:

when Hash
  ActiveStorage::Blob.build_after_unfurling \
    io: attachable[:io],
    filename: attachable[:filename],
    content_type: attachable[:content_type],
    metadata: { acl: acl }