原文

1. form_tag

1) 基础 Form

<%= form_tag do %>Form contents
<% end %>

生成 html

<form accept-charset="UTF-8" action="/" method="post"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />Form contents
</form>

  

2) 指定 url与 method

<%= form_tag("/search", method: "get") do %><%= label_tag(:q, "Search for:") %><%= text_field_tag(:q) %><%= submit_tag("Search") %>
<% end %>

生成 html

<form accept-charset="UTF-8" action="/search" method="get"><input name="utf8" type="hidden" value="✓" /><label for="q">Search for:</label><input id="q" name="q" type="text" /><input name="commit" type="submit" value="Search" />
</form>

3) 指定 controller 与 action

form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">'

  

4)几个 tag

check_box_tag

<%= check_box_tag(:pet_dog) %>
<%= label_tag(:pet_dog, "I own a dog") %>
<%= check_box_tag(:pet_cat) %>
<%= label_tag(:pet_cat, "I own a cat") %>=><input id="pet_dog" name="pet_dog" type="checkbox" value="1" />
<label for="pet_dog">I own a dog</label>
<input id="pet_cat" name="pet_cat" type="checkbox" value="1" />
<label for="pet_cat">I own a cat</label>

radio_button_tag

<%= radio_button_tag(:age, "child") %>
<%= label_tag(:age_child, "I am younger than 21") %>
<%= radio_button_tag(:age, "adult") %>
<%= label_tag(:age_adult, "I'm over 21") %>=><input id="age_child" name="age" type="radio" value="child" />
<label for="age_child">I am younger than 21</label>
<input id="age_adult" name="age" type="radio" value="adult" />
<label for="age_adult">I'm over 21</label>

2. form_for

1)如果设置了 resources :articles

## Creating a new article
# long-style:
form_for(@article, url: articles_path)
# same thing, short-style (record identification gets used):
form_for(@article)## Editing an existing article
# long-style:
form_for(@article, url: article_path(@article), html: {method: "patch"})
# short-style:
form_for(@article)

2)手动设置 action

<%= form_for @person, url: {action: "create"} do |person_form| %><%= person_form.text_field :name %><%= fields_for @person.contact_detail do |contact_detail_form| %><%= contact_detail_form.text_field :phone_number %><% end %>
<% end %>

生成 html

<form accept-charset="UTF-8" action="/people" class="new_person" id="new_person" method="post"><input id="person_name" name="person[name]" type="text" /><input id="contact_detail_phone_number" name="contact_detail[phone_number]" type="text" />
</form>

3)手动设置 action 与 class

controller

def new@article = Article.new
end

app/views/articles/new.html.erb

<%= form_for @article, url: {action: "create"}, html: {class: "nifty_form"} do |f| %><%= f.text_field :title %><%= f.text_area :body, size: "60x12" %><%= f.submit "Create" %>
<% end %>

生成 html

<form accept-charset="UTF-8" action="/articles" method="post" class="nifty_form"><input id="article_title" name="article[title]" type="text" /><textarea id="article_body" name="article[body]" cols="60" rows="12"></textarea><input name="commit" type="submit" value="Create" />
</form>

4)限定命名空间

form_for [:admin, @article]

表格将提交到 在 admin 空间下的  ArticlesController (比如对于 update 方法提交到 admin_article_path(@article) ).

3. form_with

参考:https://m.patrikonrails.com/rails-5-1s-form-with-vs-old-form-helpers-3a5f72a8c78a

1)无 model

<%= form_with url: users_path do |form| %><%= form.text_field :email %><%= form.submit %>
<% end %>

2)有 model

<%= form_with model: @user do |form| %><%= form.text_field :email %><%= form.submit %>
<% end %>

3)取消自动 ids与 class,需要手动指定

<%= form_with model: @user do |form| %><%= form.text_field :name %><%= form.text_field :email, id: :email, class: :email %>
<% end %>

生成 html

<form action="/users" ...>...<input type="text" name="user[name]" /><input id="email" class="email" type="text" name="user[email]" />  </form>

设定 label

<%= form_with model: @user do |form| %><%= form.label :name %><%= form.text_field :name, id: :user_name %>
<% end %>

注意 rails 5.2 自动生成 ids

4)form id 与 class 不再包裹在 {}中

之前

<%= form_for @user, html: { id: :custom_id, class: :custom_class } do |form| %>
<% end %>

现在

<%= form_with model: @user, id: :custom_id, class: :custom_class do |form| %>
<% end %>

  

5)form_field 适应 model属性

<%= form_with model: @user, local: true do |form| %><%= form.text_field :email %><%= form.check_box :send_welcome_email %><%= form.submit %>
<% end %>

这样就会在 user作用域中添加该参数,如果不想这么做,建议使用  check_box_tag 代替 form.check_box

params[:user][:send_welcome_email]

 

6)form_with 默认使用 ajax 提交(默认设置  remote: true)

如果不需要 ajax远程提交,必须指定 local:true

<%= form_with model: @user, local: true %>
<% end %>

  

而不指定 local:true,会生成 (优点是不刷新页面,缺点是无法显示 error信息)

<form action="/users" data-remote="true" method="post">...
</form>

该类属性由 rails-ujs 处理, rails-ujs 的其他处理技巧,参见 https://m.patrikonrails.com/a-definitive-guide-to-railss-unobtrusive-javascript-adapter-ef13bd047fff。

如何对 ajax提交做响应参考文档 http://guides.rubyonrails.org/working_with_javascript_in_rails.html

如上!

转载于:https://www.cnblogs.com/lemos/p/8492623.html

rails 杂记 - erb 中的 form_helper相关推荐

  1. rails 杂记 - erb 中的 link_to 的 ActiveRecord 与 render 中的 partial

    路由及路由参数 <%= link_to 'My Blog', {controller: 'articles', demo: "lidsi"}, class: "bl ...

  2. 在Rails资产管道中使用字体

    本文翻译自:Using fonts with Rails asset pipeline I have some fonts being configured in my Scss file like ...

  3. webpack设置应用缓存_如何使用Webpack在Rails应用程序中设置TinyMCE

    webpack设置应用缓存 by Joanna Gaudyn 乔安娜·高登(Joanna Gaudyn) 如何使用Webpack在Rails应用程序中设置TinyMCE (How to setup T ...

  4. 杂记 C中的volatile

    volatile 就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果没有volatile,基本上会导致 ...

  5. H5Stream杂记-HTML中引入RTSP/RTMP源视频初学

    最近遇到项目中视频监控的问题,老大的要求是在前端引入RTSP流媒体视频.为此,一个菜鸟怀着好奇的心情去琢磨了许久. 首先根据老大提出的建议,试一试vlc插件.为此踩了一天vlc的坑.不可否认vlc是一 ...

  6. 在 rails 3 环境中是用 生产环境 nginx + passenger 出现 css 文件无法编译的错误

    在 通过capistrano 进行发布程序到 nginx+passenger 生产环境后. 如果访问网站,出现错误.查询 production.log文件会发现 ActionView::Templat ...

  7. 杂记——假设检验中p值的理解

      ppp值是拒绝零假设的显著性水平的最小的α\alphaα值,对于一切大于ppp值的α\alphaα,错误拒绝H0H_0H0​的概率不超过α\alphaα.      ppp值是利用实际调查或实验数 ...

  8. c语言pow函数精度差,pow()函数结果强制转化为int造成误差的分析

    开发环境:codeblocks,编译器gcc 在计算102时调用pow(10, 2),再强制类型转换为int类型后输出: printf("%d",(int)pow(,)); 得到的 ...

  9. Rails中嵌套表单的解决

    什么是嵌套表单呢?举个简单的例子吧,比如你有两个表,一个User表,另一个Account表,他们是一对一的关系(也可以一对多等).现在需要提交一个表单的时候同时提交User,Account对应的字段数 ...

  10. 如何从Hash中删除一个键并获取Ruby / Rails中的剩余哈希?

    要向Hash添加新对,我会: {:a => 1, :b => 2}.merge!({:c => 3}) #=> {:a => 1, :b => 2, :c => ...

最新文章

  1. vscode如何找letax模板_一直努力却找不到变美思路?韩国新一代「整容模板」,教你如何提高美商、科学变美!...
  2. 山西地区领取2020年下、2021年上半年证书
  3. 关于数据可视化的思考小结
  4. Nacos(九)之Dubbo 融合 Nacos 成为注册中心
  5. Windows中查找文件被何进程使用
  6. contenteditable属性让div也可以当做输入框
  7. POJ3983 快算24【暴力】
  8. CSS现状和如何学习
  9. 苹果13可以用无线充电宝吗?苹果专用无线充电宝推荐
  10. java get请求参数乱码_java web项目get,post请求参数中文乱码解决
  11. OpenCV4学习笔记(17)——常用导数算子
  12. python mro文件_Python面向对象之MRO
  13. 用例图、功能模块图和数据库的区别
  14. 怎么用python读取excel图_如何用Python读取Excel中图片?
  15. 支付宝支付回调不成功原因及解决
  16. 忧郁的loli od链接爬取
  17. 母亲节不能陪在妈妈身边,我用css和js给妈妈做了一个爱心飘落
  18. 桥牌坐庄训练bm2000 level3闯关记录——A1
  19. 写论文时 复杂的三线表模板 三线表需要辅助线 辅助线需要断开 表格
  20. linux------DNS域名解析

热门文章

  1. 真实的拼多多:我们统计了56款爆品 发现一个真相……
  2. 结巴分词 java_Java版结巴分词自定义词库
  3. 什么是「设计模式」?
  4. Elasticsearch Field Options Norms
  5. 简明c语言,简明易懂的C语言俄罗斯方块
  6. 未能加载文件或程序集“FastReport
  7. Windows xp IIS 信息服务
  8. 基于RouteOS的NAT Radius网络计费管理实验
  9. CC00024.NavigationLog——|Open网络2.4.9服务端/客户端部署/本地client配置/连接成功测试|
  10. oled u8g2如何显示中文(实测有效)