Rolify Table 错误(user.add_role :admin 未知密钥错误)
Rolify Table Error (user.add_role :admin Unknown Key Error)
我正在尝试设置 rolify gem,但我 运行 遇到了在控制台中为用户分配角色的问题。
这是我的错误:
2.2.1 :007 > user.add_role :admin
ArgumentError: Unknown key: :optional.
我正在 运行 设计 cancancan 和 rolify。我也是 运行 订阅支付支持的 Koudoku gem。我怀疑这个错误可能是由于我的 "subscriptions" table 也有一个 "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
谢谢。
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
:optional => true
参数在 Rails 版本 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
我正在尝试设置 rolify gem,但我 运行 遇到了在控制台中为用户分配角色的问题。
这是我的错误:
2.2.1 :007 > user.add_role :admin
ArgumentError: Unknown key: :optional.
我正在 运行 设计 cancancan 和 rolify。我也是 运行 订阅支付支持的 Koudoku gem。我怀疑这个错误可能是由于我的 "subscriptions" table 也有一个 "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
谢谢。
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
:optional => true
参数在 Rails 版本 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