添加设计邀请不起作用

时间:2013-05-03 12:59:49

标签: ruby-on-rails devise devise-invitable

我的RoR应用程序中有User模型(在PostgreSQL数据库中),它使用Devise进行身份验证。现在我想邀请用户,所以我决定使用devise_invitable gem。按照安装指南我做了:

  1. 将gem'devise_invitable'添加到我的Gemfile
  2. 运行rails generate devise_invitable:install
  3. 运行rails generate devise_invitable User
  4. 我试图运行上面生成的迁移(这是这个gem给出的默认值,它看起来像:)

    class DeviseInvitableAddToUsers < ActiveRecord::Migration
      def up
        change_table :users do |t|
          t.string     :invitation_token, :limit => 60
          t.datetime   :invitation_sent_at
          t.datetime   :invitation_accepted_at
          t.integer    :invitation_limit
          t.references :invited_by, :polymorphic => true
          t.index      :invitation_token, :unique => true # for invitable
          t.index      :invited_by_id
        end
    
        # And allow null encrypted_password and password_salt:
        change_column_null :users, :encrypted_password, true
      end
    
      def down
        change_table :users do |t|
          t.remove_references :invited_by, :polymorphic => true
          t.remove :invitation_limit, :invitation_sent_at, :invitation_accepted_at,   :invitation_token
        end
      end
    end
    

    但是,在运行迁移时,我得到:

    ==  DeviseInvitableAddToUsers: migrating ======================================
    -- change_table(:users)
    rake aborted!
    An error has occurred, this and all later migrations canceled:
    
    PG::Error: ERROR:  relation "invited_bies" does not exist
    : ALTER TABLE "users" ADD CONSTRAINT fk_users_invited_by_id FOREIGN KEY ("invited_by_id") REFERENCES "invited_bies" ("id")
    

    我不是PostgreSQL中的大师,它是外键,但看起来应该有invite_bies表,不应该吗?但它并没有被创造出来。所以,我对这一切感到有些困惑。

    我的用户设计模型:

    devise :invitable, :database_authenticatable, :recoverable, :rememberable, token_authenticatable,:trackable, :authentication_keys => [:email]
    

    生成脚本添加了字段:invitable, :database_authenticatable

2 个答案:

答案 0 :(得分:2)

你的问题在这里:

3. Run rails generate devise_invitable

那应该是

rails generate devise_invitable MODEL

并将MODEL替换为您的设计模型的名称。这可能是用户,但它应该是您为您设计的模型的名称。因此,如果您使用User作为您的模型:

rails generate devise_invitable User

因为您没有提供模型名称,所以生成器正在生成无效迁移,这可能是一个错误,您可能想要报告该错误。当您的迁移尝试在邀请和发出邀请“invite_by”的“用户”之间创建外键关系时,它会失败,因为它不知道要引用哪个表。

编辑:2013-05-04:

您的用户模型是否也包含此内容:

 has_many :invitations, :class_name => self.to_s, :as => :invited_by

答案 1 :(得分:2)

您使用的是Schema_plus Gem吗?

如果您正在使用它,此Gem将尝试根据任何字段的_id创建外键关系。

您需要为此字段

禁用此功能
t.integer  :invited_by_id,  foreign_key: false

如果是这种情况,请告诉我。