小编nis*_*han的帖子

是否可以使用具有两种能力等级的cancan

我使用rails 3.0.9,cancan 1.6.7并设计1.4.8

我正在使用两个设计模型(用户和管理员)进行不同的登录和注册过程

所以我想根据登录用户(资源)来划分能力,因为有超过70个模型,并且这两种类型的用户只有10个模型(这里有超过50个模型和视图仅供管理员用户使用) )

我想实现两个Ability类(UserAbility和AdminAbility),并且应该将设计帮助器方法current_user/current_admin传递给UserAbility/AdminAbility

例:

在ApplicationController.rb文件中

    def current_ability
        if current_user
            @current_ability = UserAbility.new(current_user)
        elsif current_admin
            @current_ability = AdminAbility.new(current_admin)
        end
    end
Run Code Online (Sandbox Code Playgroud)

从上面我的问题,

  1. 在cancan中是否可以使用多种能力类,如果可能,那么如何创建它是因为我尝试过

    rails g cancan:user_ability

    但我得到错误,因为无法找到生成器cancan:user_ability.

  2. 如何为登录的用户/管理员选择适当的能力等级.

  3. 如果用户和管理员都访问了控制器,那么如何获取当前登录的用户/管理员对象

还有其他解决方案吗?

任何人请帮助解决这个问题

ruby-on-rails devise cancan ruby-on-rails-3

6
推荐指数
2
解决办法
3563
查看次数

Rails - 如何使用重载方法?

案例1:为模型创建新记录,并指定关联对象(Status对象而不是Status.id)

    visit = Visit.create(:date => Date.today, :status => Status.first)
    visit.status_id #=> 1
Run Code Online (Sandbox Code Playgroud)

创建记录后

我正在尝试更新属性'status_id'(Status.id而不是Status对象),但它会在保存对象后返回旧值,甚至调用reload.例:

    visit.status_id = Status.last.id
    visit.save
    visit.reload
    visit.status_id #=> 1
Run Code Online (Sandbox Code Playgroud)

当我在创建后调用reload方法时,它按预期工作

    visit = Visit.create(:date => Date.today, :status => Status.first)
    visit.status_id #=> 1
    visit.reload
    visit.status_id = 2
    visit.save
    visit.status_id #=> 2
Run Code Online (Sandbox Code Playgroud)

Case2:如果我分配'status_id'值而不是Status对象,那么就不需要重新加载对象了,它的工作正常

    visit = Visit.create(:date => Date.today, :status_id => Status.first.id)
    visit.status_id #=> 1
    visit.status_id = 2
    visit.save
    visit.status_id #=> 2
Run Code Online (Sandbox Code Playgroud)

使用上面两种情况,我应该何时使用该reload方法?它应该在之前还是之后save

activerecord associations reload ruby-on-rails-3

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