关于 formtastic ,railscasts上有相关教程,可参考railscasts
1.安装gem
- sudo gem install simple_form
2.修改Gemfile:
- gem "simple_form"
3.运行generator,会生成所需文件
- rails generate simple_form:install
- #生成文件
- create config/initializers/simple_form.rb
- create config/locales/simple_form.en.yml
- create lib/templates/erb/scaffold/_form.html.erb
4.使用,以User model为例
- <%= simple_form_for @user do |f| %>
- <%= f.input :username %>
- <%= f.input :password%>
- <%= f.input :email%>
- <%= f.input :profile,:as=>:text%> #as使用
- <%= f.input :age, :collection => 18..60 , :prompt => "Select your age"%> #collection使用
- <%= f.simple_fields_for :adress do |adress_form| %> #simple_fields_for使用
- <%= adress_form.input :name %>
- <% end %>
- <%= f.button :submit %>
- <% end %>
如果 不想生成 label,可以使其设置为false
- <%= f.input :username,:label=>false %>
同样,如果想使required为false,
- <%= f.input :username, :required => false %>
5.关于as
在activerecord下,会自动对应相关映射,例如:string生成单行文本,text生成多行文本,不过如果使用mongodb,我使用的是mongoid,没有text
类型,全是string,所以要自己手动as,例如
- <%= f.input :profile,:as=>:text%>
6. Associations 使用
- class User < ActiveRecord::Base
- belongs_to :company
- has_and_belongs_to_many :roles
- end
- class Company < ActiveRecord::Base
- has_many :users
- end
- class Role < ActiveRecord::Base
- has_and_belongs_to_many :users
- end
表单中我们可以使用
- <%= simple_form_for @user do |f| %>
- <%= f.input :name %>
- <%= f.association :company %>
- <%= f.association :roles %>
- <%= f.button :submit %>
- <% end %>
7.配置 config/initializers/simple_form.rb
Wrapper,如果想修改生成的标签为P(默认为div),只要修改
- SimpleForm.wrapper_tag = :p
默认情况下
- config.components = [ :label_input, :hint,:error]
如果不想使用error,只要去掉 即可
- config.components = [ :label_input, :hint]
更多配置可自行参考文件
8.国际化,只要修改对应本地化文件即可,
- zh:
- simple_form:
- labels:
- user:
- username: '用户名'
- password: '密码'
- hints:
- user:
- username: '登录用户名.'
- password: '输入正确的字符.'
- placeholders:
- user:
- username: '你的用户名'
- password: '****'
9. 和formtastic的比较
我个人比较喜欢 simple_form,生成的代码简洁些,更加灵活,可自定义性强。
10.textmate支持
formtastic:formtastic_tmbundle
simple_form:simple_form_tmbundle
![](http://img.zemanta.com/pixy.gif?x-id=b0a59524-4870-8692-9581-e7f8e03e38a2)