【问题标题】:Devise/Facebook callback NoMethodError (undefined method `name=' for #<User:0x007设计/Facebook 回调 NoMethodError(#<User:0x007 的未定义方法 `name='
【发布时间】:2014-04-26 23:34:54
【问题描述】:

我正在尝试将 omniauth-facebook 集成到我的网站中,但在回调时我不断收到以下错误(或类似错误):

NoMethodError(find_for_facebook_oauth 中的未定义方法 name=' for #<User:0x007f507c6f9158>): app/models/user.rb:14:inblock' app/models/user.rb:9:in find_for_facebook_oauth' app/controllers/users/omniauth_callbacks_controller.rb:4:infacebook'

这是我的 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

不知道为什么它抱怨过程“名称” - 它不应该在寻找一个字段吗?任何帮助表示赞赏。

【问题讨论】:

    标签: ruby-on-rails facebook devise


    【解决方案1】:

    您收到undefined method name=' for #&lt;User:0x007f507c6f9158&gt; 错误

    user.name = auth.info.name
    

    这只是意味着您在users 表中没有一个名为name 的字段。因此,User 模型中不存在 setter 方法 name=(注意方法名称末尾的 =)。

    如果您打算在users 上使用name 字段,请将其添加到users 表中。

    • 创建一个迁移文件,通过以下命令在users表中添加name字段

      rails generate migration AddNameToUsers name:string
      
    • 运行rake db:migrate

    【讨论】:

    • 我在迁移中添加了名称字段,但仍然遇到同样的错误。我做了一个 heroku 运行更多 db/schema.rb 并且名称字段没有显示。我执行 heroku pg:reset DATABASE 和 heroku run rake db:migrate 并产生错误 - PG::DuplicateColumn: ERROR: column "name" of relationship "users" already exists.
    • 在数据库中添加字段后重新启动服务器,然后检查是否出现错误。告诉我。
    • 我重新启动了 heroku,看起来它仍然不存在 - 当我尝试 Facebook 链接 (users/auth/facebook) 时,它会将我路由到登录 :(
    • 哎呀——我刚刚做了一个“正常”的注册,通过电子邮件确认,并且能够使用 Facebook 登录——没有回调问题——换句话说,现代软件开发的正常流程..再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2014-12-11
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多