侧边栏壁纸
博主头像
极客日记 博主等级

行动起来,活在当下

  • 累计撰写 93 篇文章
  • 累计创建 17 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

【Ruby on Rails】Form 常用的标签

Jack.Jia
2022-03-29 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

form helpers 表单辅助方法

文档: http://guides.rubyonrails.org/form_helpers.html

可以看 API: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

前提, 我们已经定义好了 class Article, 形如:

class Article < ActiveRecord::Base
end

articles 有个列: title

假设 @article 是 Article 的一个实例.

text_field 的两种不同写法

API 写法:

<%= text_field :article, :title %>

form object 中的写法:

<%= f.text_field :title %>

两个都会生成一样的内容, 我们实战中 只用 f.text_field 这样的形式.

text_field 与 text_field_tag

用法:

<%= form_for @article do |f| %>
  <%= f.text_field :title %>
  <%= text_field :article, :title %>
  <%= text_field_tag 'article[title]' %>
<% end %>

会生成:

<input type='text' name='article[title]' />

f.text_field 会自带默认值, 如果希望 text_field_tag 也有默认值的话, 就要:

<%= text_field_tag 'article[title]', '三体' %>

select , select_tag 与 options helper

<%= select_tag 'sex', options_for_select(['男', '女']) %>

会生成:

<select id="sex" name="sex">
    <option value="male">男</option>
    <option value="female">女</option>
</select>

也就是说, 上面的 select_tag 会生成:

<select id="sex" name="sex">
</select>

options_for_select(['男', '女']) 会生成:

<option value="male">男</option>
<option value="female">女</option>

options_from_collection_for_select

如果这些 options 来自于 数据库, 假设已经存在一个表 books, 有两个列: id, title,

这个表的值是:

id  title
1   三体1
2   三体2
3   三体3

于是,

<%= options_from_collection_for_select Book.all, :id, :title %>

会生成:

<option value="1">三体1</option>
<option value="2">三体2</option>
<option value="3">三体3</option>

collection_select

我们也可以直接使用 collection_select, 替代 selectoptions_from_collection_for_select.

# 假设 f 是 book的表单对象.
<%= f.collection_select :title, Book.all, :id, :title %>

会生成:

<select name="book[title]">
    <option value="1">三体1</option>
    <option value="2">三体2</option>
    <option value="3">三体3</option>
</select>

但是这种写法往往不够灵活, 所以我们用的不多.

textarea, password 与 hidden_field

<%= text_area_tag(:message, "Hi, nice site", size: "24x6") %>
<%= password_field_tag(:password) %>
<%= hidden_field_tag(:parent_id, "5") %>

会依次生成:

<textarea id="message" name="message" cols="24" rows="6">Hi, nice site</textarea>
<input id="password" name="password" type="password" />
<input id="parent_id" name="parent_id" type="hidden" value="5" />

其他 helper

可以查看官方文档: http://guides.rubyonrails.org/form_helpers.html

0

评论区