Techioz Blog

Rails の引数の数が間違っています (2 が指定され、1 が予期されています)

概要

module ApplicationHelper
  def t(*a)
    translate(*a)
  end
end

ケース 1 :- t(‘views.home.welcome_updated’、デフォルト: ‘Updated’) => エラーの取得: (引数の数が間違っています (2 が指定され、1 が期待されます))

ケース 2 :- t(‘views.welcome’) => 正常に動作

Ruby Version: 3.0.6
Rails Version: 6.1.7.6

上記のコードの何が問題なのでしょうか?

ケース 1 と 2 はどちらも Ruby 2.7 では正常に動作します。 Rubyのバージョンを3にアップグレードしたらエラーが発生しました

t メソッドを次のようにカスタマイズします

module ApplicationHelper
  def t(key, **options)
    args = [key]
    args.push options if options.present?
    translate(*a)
  end
end

しかし、これも機能しません

解決策

構造に関係なく、すべての引数を転送したい場合は、次のように … 構文を使用できます。

module ApplicationHelper
  def t(...)
    translate(...)
  end
end

または、元のメソッドに転送する前に引数を操作したり、戻る前に応答に作用したりする必要がない場合は、次のようにメソッド名にエイリアスを付けることができます。

alias_method :t, :translate