【问题标题】:Unable to use ActiveModel::MassAssignmentSecurity无法使用 ActiveModel::MassAssignmentSecurity
【发布时间】:2013-03-13 19:12:25
【问题描述】:

我正在尝试使用 ActiveModel 中的某些功能,但无法让一切正常运行。我已经包含了我的类文件和我正在运行的测试。

测试失败: ': 未定义的方法`attr_accessible

我真的不知道为什么,因为 MassAssignmentSecurity 会引入它并且它实际上正在运行。我也尝试过包含所有 ActiveModel ,但这也不起作用。我是否使用 include 或 extend 来引入 MassAssignmentSecurity 似乎并不重要。

如果我在测试中传递一些属性以在初始化中执行“assign_attributes”,那也会失败。我对 Rails 很陌生,所以我希望我只是错过了一些非常简单的东西。

TIA。

使用导轨 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

support/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

【问题讨论】:

    标签: ruby ruby-on-rails-3.2 activemodel


    【解决方案1】:

    哎呀!我昨天真是一团糟。既然我弄清楚了我的问题,不妨回答我自己的问题。

    1. MassAssignmentSecurity 中的 attr_accessible 不像 ActiveRecord 那样工作。它不会创建 getter 和 setter。如果您创建了这些,您仍然必须使用 attr_accessor。

    2. assign_attributes 是一个便利函数,有人编写它来包裹 mass_assignment_sanitizer,而不是 MassAssignment Security 中包含的东西。下面是一个示例实现:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2012-04-16
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多