2013-03-13 87 views
1

我試圖使用一些加載ActiveModel功能,但我無法使一切工作。我已經包含了我的課程文件和我正在運行的測試。 「:無法加載ActiveModel使用:: MassAssignmentSecurity

試驗與失敗未定義的方法`attr_accessible

我真的不知道爲什麼,因爲MassAssignmentSecurity將帶來的,它實際上是在運行。我也試圖包括所有的ActiveModel,但這也不起作用。如果我使用include或extend來引入MassAssignmentSecurity,似乎並不重要。

如果我通過在我測試的一些屬性在initialize行使「assign_attributes」,失敗也是如此。我對rails很新,所以我希望我只是錯過了一些非常簡單的東西。

TIA。

使用Rails 3.2.12


my_class.rb

class MyClass 
    include ActiveModel::MassAssignmentSecurity 
    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    extend ActiveModel::Naming 
    extend ActiveSupport::Callbacks 

    attr_accessible :persisted, :creds 

    def initialize(attributes = nil, options = {}) 
    @persisted = false 

    assign_attributes(attributes, options) if attributes 

    yield self if block_given? 
    end 
end 

my_class_spec.rb

require 'spec_helper' 

describe MyClass do 
    before do 
    @testcase = MyClass.new 
    end 
    subject { @testcase } 

    it_should_behave_like "ActiveModel" 

    it { MyClass.should include(ActiveModel::MassAssignmentSecurity) } 

    it { should respond_to(:persisted) } 
end 

支持/ active_model.rb

shared_examples_for "ActiveModel" do 
    include ActiveModel::Lint::Tests 

    # to_s is to support ruby-1.9 
    ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m| 
    example m.gsub('_',' ') do 
     send m 
    end 
    end 

    def model 
    subject 
    end 
end 

回答

2

哎呀!我昨天真是一團糟。自從我解決了我的問題之後,不妨回答我自己的問題。

  1. attr_accessible in MassAssignmentSecurity不像ActiveRecord那樣工作。它不會創建獲取者和設置者。如果您創建了這些,您仍然必須使用attr_accessor。

  2. assign_attributes是某人編寫的用於環繞mass_assignment_sanitizer的連接函數,並且在MassAssignment安全性中未包含某些內容。示例實施如下:



def assign_attributes(values, options = {}) 
    sanitize_for_mass_assignment(values, options[:as]).each do |k, v| 
    send("#{k}=", v) 
    end 
end 
相關問題