首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用ActiveModel::MassAssignmentSecurity

无法使用ActiveModel::MassAssignmentSecurity
EN

Stack Overflow用户
提问于 2013-03-13 19:12:25
回答 1查看 204关注 0票数 1

我试图在ActiveModel中使用一些功能,但我在使一切正常工作时遇到了困难。我已经包括了我的类文件和我正在运行的测试。

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

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

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

蒂娅。

使用rails 3.2.12

my_class.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
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

支持/活动模型.

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-14 14:14:28

呀!我昨天真是一团糟。既然我解决了我的问题最好自己回答。

  1. attr_accessible in MassAssignmentSecurity不像对ActiveRecord那样工作。它不创建getter和setter。如果您创建的是attr_accessor,您仍然必须使用它。
  2. assign_attributes是一个纵容函数,有人用它来包装mass_assignment_sanitizer,而不是MassAssignment安全性中的东西。下面是一个实例实现:

代码语言:javascript
复制
def assign_attributes(values, options = {})
  sanitize_for_mass_assignment(values, options[:as]).each do |k, v|
    send("#{k}=", v)
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15394381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档