【问题标题】:Testing cancan abilities and getting MassAssignmentSecurity::Error测试 cancan 能力并获得 MassAssignmentSecurity::Error
【发布时间】:2012-10-10 19:17:45
【问题描述】:

我已经实现了 cancan,并希望按照cancan wiki 的建议测试能力。我试图复制“用户只能破坏他拥有的项目”。

spec/models/ability_spec.rb:

require "cancan/matchers"
require 'spec_helper'

describe Ability do
  context "user is investigator" do
    it "user can only destroy projects which he owns" do
        user = FactoryGirl.create(:user)
        ability = Ability.new(user)
        ability.should be_able_to(:destroy, Project.new(:user => user))
    end
  end
end

但是我得到:

ActiveModel::MassAssignmentSecurity::Error:
       Can't mass-assign protected attributes: user

型号:

class User < ActiveRecord::Base
  has_many :projects, dependent: :destroy          
  devise :database_authenticatable, etc...         
  attr_accessible :email, :password, :password_confirmation, :remember_me, :locale 
  validates :role, :presence => true
end

class Project < ActiveRecord::Base
  belongs_to :user
end

工厂:

FactoryGirl.define do
  factory :user do |f|                        
    f.email { Faker::Internet.email }
    f.password "secret"
    f.role 1
  end
end

我明白为什么会出现这个错误,并且已经尝试了各种方法来解决它,但是对工厂的了解还不够好,无法破解它。你能帮忙吗?

【问题讨论】:

    标签: ruby-on-rails rspec factory-bot cancan


    【解决方案1】:

    所以问题与创建项目时未使用 Factory Girl 有关。应该是:

    describe Ability do
      context "user is investigator" do
        it "user can only destroy projects which he owns" do
            user = FactoryGirl.create(:user)
            ability = Ability.new(user)
            ability.should be_able_to(:destroy, FactoryGirl.create(:project, :user => user))
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多