根据关联指定CanCan限制

时间:2012-12-28 11:53:12

标签: ruby-on-rails rspec cancan

我的User模型具有以下操作:

  def release(idea)
    if idea.status == "claimed"
      idea.status = "available"
      self.ideas.delete(idea)
    end
  end

每个user has_many个想法,这就是释放想法的方式,并说“我不想再对这个想法负责了。”

但是,当前实现允许一个用户release拥有另一个用户的想法。我可以通过检查idea.user_id轻松地在函数本身中解决这个问题,但我正在尝试学习如何使用CanCan和rolify ...这就是问题出现的地方。

ability.rb说:

if user.has_role? :user
  can :release, Idea, user_id: user.id
end

这在rspec中失败了:

Failures:

  1) User manipulates ideas: can't change an idea he doesn't own
     Failure/Error: let(:james) {create(:user)}
     NoMethodError:
       undefined method `find_or_create_by' for #<Rolify::Adapter::ResourceAdapter:0xabc7d98>

tl; dr:我应该指定User还是Idea的能力?如果User,我该怎么说出这个条件?

谢谢!

修改:用户工厂:

FactoryGirl.define do
  factory :user do
    name Faker::Name.name
    email Faker::Internet.email
    provider "MyString"
    uid {"user_#{rand(1000).to_s}" }

    trait :admin do
      after(:create) {|user| user.add_role(:admin)}
    end

    trait :guest do
      after(:create) {|user| user.add_role(:guest)}
    end

    trait :authorized_user do
      after(:create) do |user|
        user.add_role(:user)
        user.remove_role(:guest)
      end
    end

  end
end

0 个答案:

没有答案