我正在尝试将omniauth-facebook集成到我的网站中,但我在回调中不断收到以下错误(或类似内容):
NoMethodError(find_for_facebook_oauth中未定义的方法name=' for #<User:0x007f507c6f9158>):
app/models/user.rb:14:in
阻止'
app / models / user.rb:9:in find_for_facebook_oauth'
app/controllers/users/omniauth_callbacks_controller.rb:4:in
facebook'
这是我的user.rb:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :omniauthable, :omniauth_providers => [:facebook]
def self.find_for_facebook_oauth(auth)
where(auth.slice(:provider, :uid)).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.name = auth.info.name
user.image = auth.info.image
end
end
end
不确定为什么抱怨程序“名称” - 不应该寻找一个字段吗?任何帮助表示赞赏。
答案 0 :(得分:1)
您在
上收到undefined method name=' for #<User:0x007f507c6f9158>
错误
user.name = auth.info.name
这只是意味着在name
表中没有名为users
的字段。因此,name=
模型中不存在 setter方法=
(注意方法名称末尾的User
)。
如果您打算在name
上使用users
字段,请将其添加到users
表格中。
通过以下命令创建用于在name
表中添加users
字段的迁移文件
rails generate migration AddNameToUsers name:string
运行rake db:migrate