2013-05-05 159 views
0

这是我ability.rb如何管理惨惨

class Ability 

include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.admin? 
    can :manage, :all 
    else 
    can :read, :all 
    end 
    end 
    end 

和指数

<% if can? :update, @post %> 
     <%= link_to t('.edit', :default => t("helpers.links.edit")), 
        edit_post_path(post), :class => 'btn btn-mini' %> 
     <% end %> 

但我recive错误

“NoMethodError在帖子#指数未定义的方法`管理员? for#“

我应该在哪里定义管理员或其他角色?如何登录时如何选择管理员或其他角色?

回答

0

你必须创建在用户模型管理方法

def admin? 
    type == 'Admin' 
end 

这是如果你有管理员模式:

class Admin < User 
end 
+0

你有一个类型列添加到用户,谷歌的单表继承,会让你的事情变得清晰。 – juanpastas 2013-05-05 01:22:21

+0

我有任何管理模式,但现在创建并在用户中定义管理方法。现在我recive“NameError在帖子#索引undefined局部变量或方法'类型'为#<用户:0x007f76dc828d90>” – 2013-05-05 01:22:38

+1

'rails g迁移AddTypeToUser类型:字符串'然后'rake db:migrate'。任何对我管理员的现有用户都需要手动更新他们的类型。 'user = User.find(id_of_admin); user.update_column( '类型', '管理');' – scarver2 2013-05-05 16:51:28