他のいろいろな人がさわっている develop ブランチをマージしたところ
current_user というメソッドの場所で
wrong number of arguments (3 for 2)
というエラーが出ます
試しにエラーの場所の前に
puts current_user
という行をはさんでみたら同じエラー内容の場所がそっちに移動しました
調べたところ current_user は devise というジェムのヘルパーメソッドのようで、
マージ前は出ていなかったし自分はユーザ関連やデバイス関連をさわっていないので、
他の人の修正が原因だと思うのですが、
チームに聞いてみても他の人のローカル環境では発生していないようで、
自分で調べなければいけなくなりました
current_user 自体は引数なしで呼んでいるので
あきらかに別の場所でエラーが起こっていると思うのですが
Rails って度々エラー内容とエラーを出す場所が食い違うことがあって
なぜこういうことがおこるのでしょうか…
先日も carrierwave の中で wrong number of arguments があったのですが
なぜか save メソッドの中で表示されていて
catrrierwave の中を自分がさわっていたので原因がわかったのですが
devise は自分がいれたわけではないのでどこを見ればいいのか全くわかりません
せめて wrong number of arguments (3 for 2)
を
起こしているメソッド箇所を特定する方法はないものでしょうか
追記:
他にもメソッドはいろいろあるのですが関係ありそうなコードはこれだけです
そもそもこのファイル自体は数ヶ月変更されていなくて
いままでも yield 先の各コントローラーで出たエラーが set_time_zone の箇所で出ることが度々あって
エラーメッセージの中身で予想ができてたのですが
今回の場合メッセージからでは該当箇所が推測できないため
どうデバッグすればいいのかわからず困っています
class ApplicationController < ActionController::Base around_action :set_time_zone # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. # protect_from_forgery with: :exception protect_from_forgery with: :null_session protected def set_time_zone if user_signed_in? && current_user.time_zone.present? gon.user_time_zone = ActiveSupport::TimeZone.zones_map[current_user.time_zone].tzinfo.identifier Time.use_zone(current_user.time_zone) { yield } else yield end end
def set_time_zone puts current_user if user_signed_in? && current_user.time_zone.present?
とかくと puts current_user の箇所にエラーが移動します
これがエラー画面になります
処理としてはログインユーザごとにタイムゾーン情報を保持していて
そのタイムゾーンをセットした上で個別のコントローラーに処理を yield するというトップレベルの処理の中で
ログインユーザを取得する部分で本当に最初の最初でおきてるエラーみたいで
他のコントローラーのページを表示しても同じエラーになります
回答2件
あなたの回答
tips
プレビュー