1

私のUserモデルには次のアクションがあります。

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

それぞれuser has_manyのアイデア、これはアイデアをリリースして「このアイデアにはもう責任を負いたくない」と言う方法です。

ただし、現在の実装では、あるユーザーreleaseが別のユーザーが所有するアイデアを使用できます。チェックすることで関数自体でこれを簡単に解決できますが、idea.user_idCanCanと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:の能力を指定する必要がありますUserIdea? の場合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
4

0 に答える 0