小编mad*_*tta的帖子

使用has_many定义能力(CanCan):通过关联

我是rails的初学者,并且一直在搜索这个问题的许多建议答案.我似乎无法翻译答案,我已经看到了我的情况.我希望有人能够对此有所了解.我关心的两个模型是用户和项目.每个用户都可以创建一个项目,但每个用户也可以管理一个项目.为了实现这一点,我在UserProject之间建立了一个has_many:through关系,使用管理模型连接两个模型.

user.rb

 has_many :managings, foreign_key: "manager_id", dependent: :destroy
 has_many :managed_projects, through: :managings
Run Code Online (Sandbox Code Playgroud)

managing.rb

belongs_to :manager, class_name: "User"
belongs_to :managed_project, class_name: "Project"
Run Code Online (Sandbox Code Playgroud)

project.rb

has_one :reverse_managing, foreign_key: "managed_project_id",
                                class_name:  "Managing",
                                dependent:   :destroy
has_one :manager, through: :reverse_managing, source: :manager
Run Code Online (Sandbox Code Playgroud)

所以,我有一个名为'初学者'的角色.初学者只能阅读项目,但选择成为项目经理的人除外.还应允许经理编辑和更新他们正在管理的项目.

以下是我在ability.rb中的尝试

 user ||= User.new # guest user (not logged in)
  if user.role? :Admin
    can :manage, :all
  elsif user.role? :Author
    can :read, :all
    can [:create], [Project]
    can [:edit, :update], Project, :user_id => user.id
  elsif user.role? :Beginner
   can :read, :all

   can …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails cancan

3
推荐指数
1
解决办法
2759
查看次数

标签 统计

cancan ×1

ruby-on-rails ×1