1

ここでは初心者がrole_modelCanCanを起動して実行しようとしています。両方の gem を Gemfile に追加しました。それらをセットアップして、実際に機能していることを確認できます。しかし、Dev DB のユーザーに新しいロールを追加しようとすると、Rails コンソールがロールバックして何も保存されませんか? これは簡単なことだと思っていたので、私は困惑しています....

これが私のコードです:

モデル - User.rb

class User < ActiveRecord::Base
  include RoleModel

  attr_accessible :email, :username, :roles, :password, :password_confirmation

  has_secure_password
  validates :email, :username, :password, presence: true
  validates :email, :username, uniqueness: true

  roles :admin, :moderator, :developer, :user
end

モデル - Ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new

    user.can :manage, :all if user.is? :admin
  end
end

ユーザーに適切なロールを追加するために Rails コンソールで実行するコマンドは次のとおりです。

admin_user = User.find(1)
admin_user.roles = [:admin]
admin_user.save

Rails は次のように吐き出します。

User Exists (0.5ms)  SELECT 1 AS one FROM "users" WHERE ("users"."email" = 'admin_user@example.com' AND "users"."id" != 1) LIMIT 1
  User Exists (0.2ms)  SELECT 1 AS one FROM "users" WHERE ("users"."username" = 'admin_user' AND "users"."id" != 1) LIMIT 1
   (0.1ms)  ROLLBACK
 => false 
4

1 に答える 1

1

これは role_model とは何の関係もないようです。純粋な初心者のやり方で、保存しようとしていたユーザーが、User.rb で設定した「パスワード」検証に違反していることに気づきませんでした。私は

:password, presence: true

以前の検証のために必要かどうかわからないため、そのファイルから。いずれにせよ、問題には修正が必要なエラーがありました。

于 2013-06-25T03:41:45.817 に答える