Rolify Table Error(user.add_role:admin Unknown Key Error)

Joh*_*ard 15 ruby-on-rails key devise rolify cancancan

我正在尝试设置rolify gem,我遇到了在控制台中为用户分配角色的问题.

这是我的错误:

2.2.1 :007 > user.add_role :admin
ArgumentError: Unknown key: :optional.
Run Code Online (Sandbox Code Playgroud)

我正在用cancancan和rolify运行设计.我也在运行Koudoku gem以获得订阅支付.我怀疑这个错误可能是因为我的"订阅"表还有一个"user_id"列.我能做些什么来纠正这个问题吗?

这是我的架构.

create_table "subscriptions", force: :cascade do |t|
t.string   "stripe_id"
t.integer  "plan_id"
t.string   "last_four"
t.integer  "coupon_id"
t.string   "card_type"
t.float    "current_price"
t.integer  "user_id"
t.datetime "created_at",    null: false
t.datetime "updated_at",    null: false
end

create_table "users", force: :cascade do |t|
t.string   "email",                  default: "", null: false
t.string   "encrypted_password",     default: "", null: false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",          default: 0,  null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at",                          null: false
t.datetime "updated_at",                          null: false
t.string   "first_name"
t.string   "string"
t.string   "last_name"
end

 add_index "users", ["email"], name: "index_users_on_email", unique: true
 add_index "users", ["reset_password_token"], name:    
 "index_users_on_reset_password_token", unique: true

create_table "users_roles", id: false, force: :cascade do |t|
t.integer "user_id"
t.integer "role_id"
end

add_index "users_roles", ["user_id", "role_id"], name:   "index_users_roles_on_user_id_and_role_id"

end
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 40

Rolify角色生成器使用以下代码生成角色模型:

class Role < ActiveRecord::Base


has_and_belongs_to_many :users, :join_table => :users_roles

  belongs_to :resource,
             :polymorphic => true,
             :optional => true

  validates :resource_type,
            :inclusion => { :in => Rolify.resource_types },
            :allow_nil => true

  scopify
end
Run Code Online (Sandbox Code Playgroud)

:optional => trueRails版本5及更高版本支持该参数.要解决此问题,只需从您的角色模型中删除该行,您应该好好去.以下是最终代码供您参考:

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles

  belongs_to :resource,
             :polymorphic => true

  validates :resource_type,
            :inclusion => { :in => Rolify.resource_types },
            :allow_nil => true

  scopify
end
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这是一个非常好的宝石,但很遗憾这种东西没有被解决,特别是考虑到有多少应用程序使用Rails版本<5 (3认同)