在 Rails 中需要编辑 ActiveRecord
对象时,可以很方便的使用 form_for
(或者 simple_form_for
) 来生成表单。但是有时候需要编辑的对象不是 ActiveRecord
,比如导入导出数据,搜索的时候需要表单;再比如有时候系统设置为了不经常去改 schema
会使用 rails-settings-cached
这样的 gem 来存储。这种时候就可以用 ActiveModel
的 modules 来生成一个 class,它满足 form builder 对 ActiveRecord
的所有需求,所以可以直接用在 form builder 里。
详见 gist: https://gist.github.com/4307089
其中 type_caster
可以限制类型,并能进行类型转换。
Ryan 在 Railscasts #396 也做了类似的封装。