BasicActiveModel 提供了一个Rails model 形式的 '小抽象'。
它没有实现任何功能。只是为我们解决 静态 model (search, contact us, 等)问题提供一种新的思路。
我们知道在 model 里我们可以有 虚拟属性(attr_accessible), 它不存在于 DB 中,我们确能像它‘确实存在’一样操作、处理它。
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, 真是如此的简单 !