form_for使用总结

基础

form_for(record, options = {}, &block)
form_for用来将表单绑定到对象上,从而快速地添加需要编辑的对象的属性。

<%= form_for @article, url: { action: "create" }, html: { class: "nifty_form" } do |f| %>
    <%= f.text_field :title %>
    <%= f.text_area :body, size: "60x12" %>
    <%= f.submit "Created" %>
<% end %>
  • @article 是要编辑的对象
  • form_for 方法的参数只有一个Hash,各种选项均为嵌套Hash,如url(表单提交的地址),method(表单提交方法),html(表单html属性),namespace(命名空间,将其值作为前缀添加到id属性上)
  • form_for 方法会拽入一个表单构造器对象—f变量
  • 生成表单控件的帮助方法在表单构造器对象f上调用

####记录辨别技术

使用REST资源时,如 resources :articles,可以只把模型实例传给form_for,Rails会自行查找模型名等其它信息

form_for(@article)

如上代码,Rails会根据@article是否为新纪录(record.new_record?),从而选择正确的提交地址,生成name属性等。Rails同时会自动设置class和id属性。

####用法总结

<%= form_for(@person, as: :client) do |f| %> # 替换对象的名称,此时params[:client]取得表单提交内容
<%= form_for post do |f| %> #使用本地变量显示表单
<%= form_for @post, url: super_posts_path do |f| %> #自定义提交地址
<%= form_for([:admin, @post]) do |f| %> #在路由中有命名空间
<%= form_for([@document, @comment]) do |f| %> #两个资源定义了关联,添加comment到document,@document=Document.find(params[:id]),@comment=Comment.new
<%= form_for @post, method: :patch do |f| %> #设置提交方式,:get|:post|:patch|:put|:delete
<%= form_for @post, remote: true do|f| %> #使用剥离式js异步提交
<%= form_for @post, data: { behavior: "autosave" }, html: { name: "go" } do |f| %> #设置html属性,data属性单独设置,其他html属性通过html hash设置

####表单帮助方法

check_box
color_field
data_field
datetime_field
datatime_local_field
email_field
hidden_field
label
month_field
number_field
password_field
phone_field
radio_button
range_field
search_field
telephone_field
text_area
text_field
time_field
url_field
week_field