Rails,将回调包含到无表模型中的正确方法是什么



我正在扩展并包含这些文件,但仍然收到:undefined method after_initialize for Play:Class

class Play
  extend ActiveModel::Callbacks
  extend ActiveModel::Naming
  include ActiveModel::Validations
  include ActiveModel::Validations::Callbacks
  include ActiveModel::Conversion
  after_initialize :process_data
  #...
end

我使用的是Rails4。

我不知道你是否需要所有的ActiveModel开销,但你可以用更少的代码来完成:

class Play
  include ActiveModel::Model
  def initialize(attributes)
    super(attributes)
    after_initialize
  end
  private
  def after_initialize
    ...
  end
end

试用以下代码

class Play
  extend ActiveModel::Naming
  extend ActiveModel::Callbacks
  define_model_callbacks :initialize, :only => :after
  include ActiveModel::Validations
  include ActiveModel::Validations::Callbacks
  include ActiveModel::Conversion
  attr_accessor :name
  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
    run_callbacks :initialize do
      puts 'initialize callback'
    end
  end
  def attributes
    return @attributes if @attributes
    @attributes = {
      'name' => name
    }
  end
end
#1.9.2-p290 :001 > Play.new(:name => 'The name')
#initialize callback
# => #<Play:0x00000006806050 @name="The name"> 
#1.9.2-p290 :002 >

最新更新