我有一个模块,通过查看他们的habtm关系和belongs_to关系来设置类可访问的属性。它还会检查表并将其属性添加到可访问列表中。
模块看起来像这样
module ModAccessible
extend ActiveSupport::Concern
included do
if table_exists?
column_names.each {|att| attr_accessible att}
end
if reflect_on_all_associations(:has_and_belongs_to_many).any?
association = reflect_on_all_associations(:has_and_belongs_to_many)
association.each {|model| attr_accessible model.plural_name.singularize + "_id"}
association.each {|model| attr_accessible model.plural_name}
end
end
end
我测试的输出是这样的..
类
# == Schema Information
#
# Table name: accessibilitytypes
#
# id :integer not null, primary key
# title :string(255)
# displayit :boolean
# cssclass :string(255)
# created_at :datetime
# updated_at :datetime
#
class Accessibilitytype < ActiveRecord::Base
has_and_belongs_to_many :venues
validates :title, :presence=>true, :uniqueness=>true
include ModAccessible
end
未包含模块
[35] pry(main)> Accessibilitytype.attr_accessible
=> {:default=>#<ActiveModel::MassAssignmentSecurity::WhiteList: {}>}
包含模块
[37] pry(main)> Accessibilitytype.attr_accessible
=> {:default=>#<ActiveModel::MassAssignmentSecurity::WhiteList: {"id", "title", "displayit", "cssclass", "created_at", "updated_at", "venue_id", "venues"}>}
我正在尝试编写测试,但我很难知道如何最好地实现它。 我假设我应该创建一个虚拟类,而不是依赖于真正的类。但是如何在测试环境中建立两个类之间的关系?如何在没有表的情况下存根属性名称?
我将向您介绍我想要实现的目标:
require 'spec_helper'
describe ModAccessible do
class Head < ActiveRecord::Base
has_many :hairs
end
class Hair < ActiveRecord::Base
belongs_to :head
end
before do
let(:dummy_class) {Hair.new { include MorseAccessible}}
end
describe "has_and_belongs_to_many" do
expect(dummy_class.attr_accessible).to include :head_id
end
我希望这很清楚。 感谢