BasicActiveModel

BasicActiveModel 提供了一个Rails model 形式的 '小抽象'。
它没有实现任何功能。只是为我们解决 静态 model (search, contact us, 等)问题提供一种新的思路。

我们知道在 model 里我们可以有 虚拟属性(attr_accessible), 它不存在于 DB 中,我们确能像它‘确实存在’一样操作、处理它。

  • BasicActiveModel * 同样的,我更愿意将它 理解为 ‘虚拟 model’…
    意思和目的 和上面的 attr_accessible 一样,现在让我们来看看 attr_model

使用举例

class ContactUs < BasicActiveModel # 注意继承于 BasicActiveModel,其它所有(注意是'所有')的代码和平时你写的一样
    attr_accessor :email, :subject, :body, :admin
    attr_accessible :email, :subject, :body
    validates_presence_of :body
  end

  ...
  (in the view)
  ...
  = form_for @contact_us do |f|
    = f.text_field :email
  ...

  ...
  (in the ContactUs controller)
  ...

  @contact_us = ContactUs.new(params[:contact_us])
  if @contact_us.valid?
    ...

看起来很神奇是不是?…别紧张,来看看源代码。

class BasicActiveModel
  extend ActiveModel::Naming
  include ActiveModel::Validations
  include ActiveModel::MassAssignmentSecurity
  include ActiveModel::Conversion

  def persisted?
    false
  end

  def initialize(attributes = {})
    if attributes.present?
      sanitize_for_mass_assignment(attributes).each { |k, v| send("#{k}=", v) if respond_to?("#{k}=") }
    end
  end
end

Orz, 真是如此的简单 !

你可能感兴趣的:(BasicActiveModel)