私の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