设计/ Facebook回调NoMethodError(未定义方法`name =' for#

时间:2014-04-26 23:34:55

标签: ruby-on-rails facebook devise

我正在尝试将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

不确定为什么抱怨程序“名称” - 不应该寻找一个字段吗?任何帮助表示赞赏。

1 个答案:

答案 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