创建一个包含store_accessor的模块

时间:2016-06-16 10:31:52

标签: ruby-on-rails ruby json module

module ServiceBackupable::AWS
  store_accessor :data, :last_backup_at
  def backup
    ...
  end
end

$ ServiceBackupable :: AWS

NoMethodError: undefined method `store_accessor' for ServiceBackupable::AWS:Module

解决这个问题包括ActiveRecord :: Store

module ServiceBackupable::AWS
  include ActiveRecord::Store
  store_accessor :data, :last_backup_at
  def backup
    ...
  end
end

$ ServiceBackupable :: AWS

NoMethodError: undefined method `class_attribute' for ServiceBackupable::AWS:Module
    from /home/project/.gem/ruby/2.1.0/gems/activerecord-4.1.1/lib/active_record/store.rb:69:in `block in <module:Store>'

如何创建具有商店访问者的模块?

1 个答案:

答案 0 :(得分:0)

根据您的代码,我认为模块ServiceBackupable::AWS旨在用作mixin(即被其他类/模块包含)。如果是这种情况,那么您可以将模块设为ActiveRecord::Concern

module ServiceBackupable::AWS
  extend ActiveSuport::Concern
  include ActiveRecord::Store

  included do
    store_accessor :data, :last_backup_at
  end
end

请注意,方法store_accessor的评估推迟到包含此模块的的定义(直接或间接),而不是此模块本身。