Ruby on rails 设计+;Omniauth+;Heroku在#new_with_会话中的未定义方法
社交登录在开发中非常有效,但一旦推到heroku,我就会在Ruby on rails 设计+;Omniauth+;Heroku在#new_with_会话中的未定义方法,ruby-on-rails,ruby,heroku,devise,omniauth,Ruby On Rails,Ruby,Heroku,Devise,Omniauth,社交登录在开发中非常有效,但一旦推到heroku,我就会在new中得到NoMethodError(未定义的方法'each'表示nil:NilClass) 从我的用户模型: def self.new_with_session(params, session) if session["devise.user_attributes"] new(session["devise.user_attributes"], without_protection: true) do |user|
new
中得到NoMethodError(未定义的方法'each'表示nil:NilClass)
从我的用户模型:
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
我的调试遇到了障碍。有什么想法吗?调试想法?类似的经历?解决了!事实上,问题在于gem上的acts_as_taggable_。由于
session[“design.user\u attributes”]
包含了所有user
属性,当其中一个属性“充当标记”时,就像我的例子中的“技能”或“兴趣”,gems魔术似乎将其转换为多参数或嵌套的paramater属性,然后rails尝试在这些值上循环-在我的例子中是nil。因此,如果存在“skills”=>nil
,我会得到一个未定义的方法,用于nil
错误
我还没有深入检查gems的源代码,以确认问题出在哪里,但我相信rails中的错误来自于中的第25行或第27行
简单的解决方案是添加会话[“design.user_attributes”]。如果{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
你有一些变量,当它不应该是nil时。每个电话在哪里?但很可能您忘记配置生产环境;)