如果用户模型已定义资源,则rolify with_all_roles不起作用

时间:2012-12-17 18:56:53

标签: ruby-on-rails cancan rolify

我想从User模型中获取一个说明版主的列表,在这种情况下可以使用

u = User.new(:name => "n", :surname => "s", :email => "a@m.c", :password => "x")
u.add_role(:moderator)
u.save!

但如果我像这样为用户模型分配资源,则不会列出具有角色主持人的用户

u = User.new(:name => "m", :surname => "b", :email => "a@m.c", :password => "x")
u.add_role(:moderator, Post.first)
u.save!

更新

post.rb

class Post < ActiveRecord::Base
  attr_accessible :user_id, :content
  belongs_to :user
end

user.rb

class User < ActiveRecord::Base
  rolify
end

1 个答案:

答案 0 :(得分:2)

readme所述,您应该将resourcify添加到您的帖子模型和其他所有要应用角色的模型上。

因此,您的Post模型应如下所示:

<强> Post.rb

class Post < ActiveRecord::Base
  resourcify
  attr_accessible :user_id, :content
  belongs_to :user
end

*编辑*

您可以使用User.with_all_roles({:name => :admin})

为所有用户提供角色:admin

我创建了一个vanilla项目,使用具有相同User和Post模型的rolify。更改帖子模型并添加resourcify,更改用户模型并添加has_many :posts

user = User.create(...)
user.add_role :admin
post = user.posts.create(...)
user2 = User.create(...)
user2.add_role(:moderator, post)

似乎正在使用这些:

  • User.with_all_roles({:name =&gt;:admin})
  • User.with_all_roles({:name =&gt;:moderator,:resource =&gt; Post})
  • User.with_all_roles({:name =&gt;:版主,:资源=&gt; Post.first})