我的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