さて、Devise と CanCan の組み合わせを使用して、プロジェクトにユーザー ロール システムを作成しようとしています。これが人気のある組み合わせであることは知っていますが、半ダースの半分完了したチュートリアルを実行した後、最終的に何かが機能するようになりましたが、まだ問題があります.
説明は次のとおりです。ユーザーは登録でき、管理者、ワーカー、またはクライアントのいずれかになります。彼らが選択したオプションはデータベースに保存されますが、CanCan でこれらのオプションを使用しようとすると問題が発生します。これが私のコードです。これまでの内容を確認できます。
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
:subdomain, :first_name, :last_name
validates_presence_of :email
validates_uniqueness_of :email, :case_sensitive => false
ROLES = %w[admin worker client]
def role?(role)
roles.include? role.to_s
end
end
role.rb
class Role < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments
end
割り当て.rb
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
能力.rb(これはCanCan用です)
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new #guest user
if user.role? :admin
can :manage, :all
else
can :read, :all
end
if user.role?(:worker)
can :create, Project
can :update, Project do |project|
project.try(:user) == user
end
end
end
end
project.rb
class Project < ActiveRecord::Base
has_many :lists, :dependent => :destroy
has_many :messages, :dependent => :destroy
belongs_to :user
attr_accessible :title, :description
validates :title, :presence => true,
:length => { :minimum => 5 }
end
それらはすべて私のモデルです。ここのチュートリアルに従いました: http://railscasts.com/episodes/192-authorization-with-cancanそして、ユーザーの役割を変更してもコードが同じであることを確認しましたが、同じエラーが発生し続けます:
load_and_authorize_resource
プロジェクトコントローラーとプロジェクトビューに次のものがあります。
<% if can? :edit, @project %>
<td><%= link_to 'Edit', edit_project_path(project) %></td>
<% end %>
現在何も機能していません。これは緊急のことであり、私は Rails の経験が豊富ではないため、どなたかの助けや提案があれば非常に感謝しています。私のコードをさらに見る必要がある場合、または私が達成しようとしていることをさらに説明したい場合はお知らせください。ありがとう!