0

開発中はソーシャル ログインがうまく機能していますが、heroku にプッシュされるNoMethodError (undefined method `each' for nil:NilClass)new.

私のユーザーモデルから:

def self.new_with_session(params, session)
  if session["devise.user_attributes"]
    new(session["devise.user_attributes"], without_protection: true) do |user|
      user.attributes = params
      user.valid?
    end
  else
    super
  end
end

デバッグ中に問題が発生しました。何かご意見は?デバッグのアイデア?似たような経験?

4

1 に答える 1

0

解決しました!問題は実際にはacts_as_tggable_on gemにありました。session["devise.user_attributes"]すべての属性が含まれているためUser、私の場合の「スキル」または「興味」のように、「acts_as_taggable」のいずれかに到達すると、宝石の魔法がそれをマルチパラメーターまたはネストされたパラメーター属性に変換し、レールが試行するように見えます値をループする - 私の場合は nil です。したがって、"skills"=>nil存在する場合、undefined method each for nilエラーが発生します。

問題がどこにあるかを確認するために宝石のソースをまだ詳しく調べていませんが、レールのエラーはhttps://github.com/rails/rails/blobの25行目または27行目から来ていると思います/master/activerecord/lib/active_record/attribute_assignment.rb .

簡単な解決策はsession["devise.user_attributes"].delete_if { |k,v| v.blank? }、私のnew_with_session方法に追加することでした。

def self.new_with_session(params, session)
  if session["devise.user_attributes"]
    session = session["devise.user_attributes"].delete_if { |k,v| v.blank? }
    new(session, without_protection: true) do |user|
      user.attributes = params
      user.valid?
    end
  else
    super
  end
end
于 2013-01-16T17:46:42.617 に答える