更新: 2017/06/11
更新: 2017/06/15 加粗,submit必须放在form_for内部
更新: 2017/06/23 对待完成的追加# TODO:
                          增加了form_for 选项默认情况的说明
                          增加了调用form_for/tag时要加<%=>
                          只加了submit_tag
                          补充: render action: 't1' 和render 'sample/t1'效果一样
更新: 2017/06/27 增加了各类field的书中位置p111
更新: 2017/06/29 增加了fabicon设置里地址的描述
更新: 2017/07/01 增加了link_to里文字自定义的方法
事故: 2017/07/01 上面那个更新把样例代码复制过来了,结果因为垃圾新浪博客大于小于号<>的bug直接被吞,后面内容全没了。
修复: 2017/07/02 重新填上垃圾新浪造成的坑,顺带鄙视新浪全体工作人员
更新: 2017/07/11 补充参数的含义
总结: 2017/08/13 呼出模板传递变量  render ..., 变量名: 值
                          向外部传递变量 provide  接收: yield(:变量名)
                          增加 hidden_field_tag
更新: 2017/08/17 增加了面向全体helper的名称
                          增加render传递参数的条件:  部分模板
更新: 2017/09/04 修正了submit按钮的确认信息表示方法 data: {confirm: '...', disabled_with: '...'}
                          增加了check_box_tag
更新: 2017/09/07 增加了部分模板路径的补充
更新: 2017/09/11
修正了部分模板处传递参数的写法(locals: {sample: @value}
更新: 2018/02/06 在link_to处增加多个选项用{}包围, 纠正method的默认选项 get
更新: 2018/02/07 增加视图相关的逻辑方法栏并增加current_page?
更新: 2018/03/06 完善layout相关
                         替换: 《 ---> <   ,   》 ---> >
更新: 2018/03/07 补充了呼出模板时候省略一部分路径的规则: [和主模板在同级文件夹时可省略文件夹]
更新: 2018/03/20 完善向部分模板传递参数
更新: 2018/03/29 纠正平写错误 [grounped_collection_select] -> [grouped_collection_select]
          补充了 grouped_collection_select 的参数说明
更新: 2018/09/30 补充current_page?参数情况, 修改错误的content_for代码
更新: 2019/04/11  修正部分模板处的小错误并补充呼出时的路径写法
更新: 2019/04/17  修正并重构form助手相关描述(跳过select_xxx和其他的表单助手)
                          统一所有table宽度为100%, 保证美观
                          添加content_for?
更新: 2020/02/06 完善collection_select参数的说明
 
视图助手(view helper)
 表单视图助手
 form
 

没有动作方法(action method)的话直接呼出模版文件

需要设定route(相当于不需要controller)

   
 分类
 form_tag  生成不涉及Model的表单
 form_for/form_with  生成编辑特定Model对象的表单
 具体视图助手

 FormTag助手

和Model无关的通用型

 label_tag  
 text_field_tag  
 file_field_tag  
 check_box_tag  
 radio_button_tag  
 select_tag  
 submit_tag  
 hidden_field_tag  
   
   
 Form助手 

参数: 对象名 属性名 其他

例 text_field :book, :title, size:25

 label  
 text_field  
 file_field  
 check_box  
 radio_button  
 select  
 f.file_field  
 f.check_box  
 f.radio_button  
 f.select  
 f.Form助手 

参数: 属性名 其他

前提: 模型路径用 resources来指定

好处:不用指定模型对象;
          自动设置路径

 f.label  
 f.text_field
 f.password_field
 
 f.file_field  
 f.check_box   
 f.radio_button   
 f.select  
   
   

 form_tag

生成通用表格

 定义
form_tag([url_opts [, opts]]) do
...
end

● 注意:调用要 <%= form_tag ... do>

● 参数

 url_opts

和 url_for 的参数一样

也可以用pathHelper

● 例

{controller: :test, action: :t2}

● 注:

省略controller的话默认当前所在controller, 如 { action: :t2 }

 controller  视图控制器名
 action  动作(方法名)(controller#method)
 host  主机名(覆盖现在的主机)
 protocol  协议名(覆盖现在的协议)
 anchor  锚名?
 only_path   是否返回相对url(是否省略协议/主机/接口)
 不指定host的话默认true
 trailing_slash  末尾要不要/
 默认false
 user  HTTP识别用的用户名
 password  HTTP识别用的密码
 只指定一个:back  链接向之前一个链接 
 (返回Referer header)
 opts
 method

发送表格时的HTTP方法
 默认post

 multipart

(enctype属性的'multipart/form-data'设定)
 上传文件时候使用 multipart: true
 其他时候不用管

 其他  <form>的要素,如id, class等
   
   

form_for

生成对象的特定表格

 定义

form_for(var [, opts]) do |form|
...
end

● 注意:调用要 <%= form_for ... do>

● 参数

 var  表单修改的对象Model
 opts
 url

和url_for一样, 见form_tag

也可以用pathHelper

 html

和form_tag一样

● method, multipart, 其他(id, class等)

● 好处: 根据传入的Model的状态自动设定路径

新建

# controller
def book
@book = Book.new
end # view
<%= form_for @book do |f|%>
# 相当于
<%= form_for @book, books_path,
html: {id: :new_book, class: new_book} do |f| %>

编辑

# controller
def book
@book = Book.first
end # view
<%= form_for @book do |f|%>
# 相当于
<%= form_for @book, book_path(@book),
html: {id: :edit_book, class: edit_book_1, method: :patch} do |f| %>
   
 生成<input>, <textarea>元素

●   f.类型的 省略掉obj

●  _tag类型的 另外查

xxxx_field

text_field(obj, prop [,opts])

password_field(obj, prop[,opts])

file_field(obj, prop[,opts])

hidden_field(obj, prop[,opts])

color_field

datetime_field

email_field

number_field

search_field

time_field

week_field

date_field

datetime_local_field

month_field

range_field

telephone_field

url_field

参数

 obj

对象Model实例

● f.类型下省略

 prop

属性名

● 属性名必须是Model里实际存在的, 不然报错

 opts  input/textarea对象的属性
 value  值
 checked/unchecked  checked/unchecked时的value值
   
 text_area(obj, prop, [,opts])  
 radio_button(obj, prop, value [,opts])  
 check_box(obj, prop [, opts [,checked="1" [,unchecked="0"]]])

● 实际输出两个input

<input type="checkbox"> ,  <input type="hidden">

原因: 在checkbox没有被点击时传送[没选择]这一信息

   
   
 HTML5专用元素
 不对应html5的生成
 text_field

 color_field  选择颜色框
 datetime_field  输入日期时间框
 2017/1/1/1/0
 email_field  输入邮件框
 number_field  输入数字框
 search_field  搜索框
 time_field  输入时间框
 1/2/0
 1:02:00
 week_field  输入周框
 date_field  输入日期框
 2017/1/1
 datetime_local_field   输入日期时刻框
 (本地?)
 month_field  输入月份框
 range_field   滑块
 slider
 telephone_field  输入电话框
 url_field  输入网址框
   

选择框/列表框

select(obj, prop, choices [,opts [,html_opts]])
 参数

 obj  对象
 form_for下省略
 prop  指定对象的属性
 :sample
 choices  选项(options)
 数组或者哈希表

 数组  选项和值为数组元素
 哈希表  选项为哈希值
 值为哈希值对应的值
 opts

选项
 指定多个的话用{}扩起来

 include_blank  最开头追加一个选项
 ● true为空
 ● 'test'则输出文本 
 disabled  指定无效化的选项
 字符串或者数组 
 selected  指定初始被选中的选项
 html_opts   <select>元素的属性
 指定多个的话用{}扩起来
   

● 例:

select @allQusetionnaire, :question, ['first', 'second', 'third'], {include_blank: 'test', disabled: ['first'], selected: 'second'}, {multiple: true, size: 50} 
 集合框
使用数据库数据
collection box

collection_select(obj, prop, collection, value, text [,opt [,html_opts]])
 obj

对象

● params的名字, params[A][B]的A部分

● form_for代码块下省略

 prop

指定对象的属性

● params的名字, params[A][B]的B部分

 collection  生成选项的对象
 value

对象(collection参数)里指定为 value 的属性

● 调用collection.value指定的方法

 text 

对象(collection参数)里指定为输出的文本的属性

● 调用collection.text指定的方法

 opt  和选项框/列表框一样
指定多个的话用{}扩起来

 include_blank  最开头追加一个选项
 ● true为空
 ● 'test'则输出文本 
 disabled  指定无效化的选项
 字符串或者数组 
 selected  指定初始被选中的选项
 html_opts  <select>元素的属性
   
   
   
 选择框/列表框/集合框
 选项组块化

grouped_collection_select(obj, prop, collection, group, group_label, option_key, option_value [,opts [,html_opts]])

● 前提: 准备association

● 参数

 obj  对象
 form_for代码块下省略
 prop  指定对象的属性
 collection

参数构成<optgroup>要素的对象数组

 group

<option>的数据源
 collection的成员(member)

● 必须是collection的方法(返回一个数组), 获取下一级选项的数组/Model

自动进行如下调用

collection.group
 group_label

<optgroup>的标签元素,同时也是小组标签
 参数collection的属性

● 必须是collection的方法(返回一个值)

作为选项群的标签文本

 option_key   <option>的value
  参数grounp的属性
 option_value  <option>的文本
  参数grounp的属性
 opts   和选项框/列表框一样
 指定多个的话用{}扩起来

 include_blank  最开头追加一个选项
 ● true为空
 ● 'test'则输出文本 
 disabled  指定无效化的选项
 字符串或者数组 
 selected  指定初始被选中的选项
 html_opts   <select>元素的属性
   
 select_tag  select_tag(prop, [opt_tags [,opts]])

 参数含义

 prop  编辑对象
 opt_tags

<option>选项 (字符串的数组)

select_tag :test, raw("<option>a</option>
<option>a</option><option>a</option>")

● 生成选项的方法: options_xxxxx

 opts 

opts + html_opts

● opts

 include_blank  最开头追加一个选项
 ● true为空
 ● 'test'则输出文本 
 disabled  指定无效化的选项
 字符串或者数组 
 selected  指定初始被选中的选项

● html_opts

<select>元素的属性

id, class等

 生成选项  options_xxxxx
 options_for_select(container [,select])

container   选项的数组或者哈希表
select   默认的选项
 指定是用value
   
 options_for_select
options_for_select(container [,selected])

● 参数

 container

选项(数组或者hash)

● 数组

value和text都是元素值

● 哈希表

text=>value,

即key对应输出文字, value对应value

 selected

设置初始选中的值

● 指定的是value而不是text

 option_from_collection_for_select
option_from_collection_for_select(collection, value, text [,selected]

● 相当于 collection_select(obj, prop, collection, value, text [,opt [,html_opts]])

● 参数

 collection  对象
 value  设置为value的属性
 text  设置为text的属性
 selected  默认的选项
 指定是用value
   
 option_groups_from_collection_for_select

option_groups_from_collection_for_select(collection,
group, group_label, option_key, option_value [,selected])
 ● 相当于 grouped_collection_select(obj, prop, collection, group, group_label, option_key, option_value [,opts [,html_opts]])

● 参数

 collection

对象Model

<optgroup>用

 group

collection的关联

<option>用

 group_label

collection的属性

<optgroup>label的text

 option_key

group的属性

<option>的value

 option_value

group的属性

<option>的text

 selected  默认的初始选项
   
   
 选择时刻  
 datetime_select
 date_select
 time_select
 xxxx.select(obj, prop [,opts
[,html_opts]])

参数

 obj  对象名
 form_for下省略
 prop  指定对象的属性
 :sample
 choices  选项
 数组或者哈希表

 数组  选项和值为数组元素
 哈希表  选项为哈希值
 值为哈希值对应的值
 opts  选项
 指定多个的话用{}扩起来
 html_opts   <select>元素的属性
 指定多个的话用{}扩起来
 opts  指定多个的话用{}扩起来
 P128
# TODO: E055D2D0-BEB2-46F5-818C-B85B5238D596
   
   
   

例:
 datetime_select @allQusetionnaire, :question

 select_datetime
 select_date
 select_time
 select_year
 select_month
 select_day
 select_hour
 select_minute
 select_second
 select_xxxx(date [,opts [,html_opts]])
 和上面的差不多 
 date指定默认值,不可指定默认选项
   
 其他表格视图助手  
 标签
 <label></label>
 label(obj, prop, [,content] [,opts],
&block)

 obj  对象名
 form_for下省略
 prop  指定对象的属性
 :sample
 content/&block  <label>的内容
 &block为代码块
 opts   <label>的属性
   
   
   
   
   
   

 f.submit
f.submit([value [,opts]])

提交所在form框架下的一切更新

● 例

form.submit 'update', {disabled: true, data: {confirm: 'ok?', disable_with: '...'}}

● 参数

 前提  在form_for代码块内部
 参数
 value   标题
 opts

可选

 disabled  是否是提交按钮无效
 data  独自的数据属性(

 confirm  弹出确认框
 disable_with  按下提交后提交按钮无效
 并显示文字
 其他  id, class等<input>的属性
   
   
 form_for下编辑不同模型  fileds_for(var) do |f|
   ...
 end
 var: 模块对象
 form_for内部用
 
 field_set_tag
 整合多个表单
 field _set_tag([legend [,opts]) do
  ...
 end

 legend  fieldset的标题
 opt's  <fieldset>的要素

生成<fieldset><legend>(field的标题)

   
   
   
   
   
   
   
   
   
   
加工类视图助手 
 自动转换换行
 加<p> 
 simple_format(text [,html_opts
[,opts]])

 参数  text 字符串
 html_opts

附加属性
 opts  运行选项

 opts

 sanitize  删除标签
 默认false
 wrapper_tag  指定围绕字符的标签
 默认p
   
   
   
 html_opts  标签: :属性的哈希表
 例: {class: :sample, style: :"font-size:
20px"}
   
   

simple_format '1111111111111111111', {class:
:test, style: :"font-width:bold; font-size: 20px;"}, {sanitize:
false, wrapper_tag: 'h2'}

 剪裁字符串  truncate(text [,opts])

 参数

 text  需要剪裁的字符串
 opts  动作选项
 opts

 length  需要的字数
 默认30
 separator  到哪里位置
 不超过长度的最长的
 omission  省略除附加的文字
 注意:省略文字算在length里
 即length <= strLength + omiLength
 多出部分从str里剪裁
   
   
 注  不要用<%== ... %>输出剪裁过的文字
 可能把结束标签给减掉了
   
   
 截取字符串片段  excerpt(text, phrase [,option])

 参数

 text   截取对象
 字符串
 phrase  截取的字符串
 option  动作选项
 option

 radius  截取的前后范围
 omission  截取时候前后附加的字符串
 注:再长也会保留截取字符串
   
   
   
   
   
   
 表格和列表隔n行换色  cycle(value [,...] [,name:cname])
 一般用在each代码块下
 例style="background-color:<%= cycle'red',
'#FFff99'%>;

 value   颜色值
 '#121212', 'red"
 name:cname  cycle的名字
 用于识别

其他颜色相关

 获取当前颜色循环  current_cycle([cname='default'])
 重置现在循环  reset_cycle([name = 'default])
   
   
   
 高亮文字  highlight(text, phrase [,highlighter:
replaced])

 text  处理对象 
 phrase  关键词
 可以用数组指定一堆
 highlighter: replaced  '替换的标签'
 '<h1></h1>'
\1: 搜索到的关键词,占位符
   
   
 代码块内进行输出  <% =  ... %>输出最后一个数据
 <%  ... %>中想要输出的话
 <%  
concat ...
...
concat ...
  %>
 尽量少用
 html字符转义   把危险字符转化成安全字符
< <<br>  >>
 & &

 Rails 2及之前版本  h(exp)
 Ruby 3之后不需要
 所有输出自动转义 
 
 不转义直接输出   <%== exp %>
  raw(exp)
  exp: 返回值的式子等
   
   

 字符串中除去要素  sanitize(html [,opts])

 参数

 html   html字符串
 opts  指定保留的标签和要素
  不指定则使用默认
 tags: ["p", "h1"]
 attributes: ["id", "class", "href",
"style"]
 无视设置永远除去JavaScript:(
   
   
   
   
 字符串修整
 不是视图助手,是Ruby语法
 sprintf(format, obj [,...])

 参数

 format  形式
 obj  填充的字符
 %c  字符
 %s  字符串
 %p  p()的格式
 %b, %B  2进制
 %o  8进制
 %d, %i  10进制
 %x, %X  16进制
 %f  浮点数
 %e  浮点数
 科学计数法
 %%  %
 +  带正负号
 -  负数带负号
 0  右对齐(d)
 %[旗][长度][.精度]  旗: 0, +, -
 长度:生成字符串总长度(包含小数点和符号)
 精度: 小数点以下位数。整数的话和长度一样(字符串长度)
   
   
   
   
   
   
   
   
 数值处理
 number_xxxxx
P150~152
# TODO:

 number_to_currency(num [,opt])  转换成货币形式
 number_to_human(num
[,opt]) 
 转换成计数法
 1.xxxx*exp(10)
 number_to_human_size(num [,opt])  以比特单位转换数值为KB, MB 
 number_to_percentage(num [,opt])  转换成百分比 
 number_with_delimiter(num [,opt])  增加各位符(没三位隔一下)
 number_with_precision(num [,opt])  指定位数
   
   
   
   

参数

 通用

 locale   使用地点
 默认当前
10.4再写
 precision  小数点下的位数
 默认3
  number_to_percentage(num [,opt])默认2
 separator  小数点记号
 默认.
 delimiter  位的分隔符 
 默认,
 123,456,789
 number_to_percentage(num [,opt])
 number_with_precision(num [,opt]) 都默认为''空
 raise  参数无效时是否发送例外 NumberError
 默认false
 number_to_currency

 unit  货币单位
 默认$
 format  正数形式
 默认 %u%n
 %u货币单位
 %n数值绝对值
 negative_format  复数形式
 默认-%u%n
   
   
 number_to_human

 units  单位
 整数位: :unit, :ten, :hundred, :thousand, :million,
:billion, :trillion, :quadrillion
 小数位: :deci, :centi, :mili, :micro, :nano, :pico,
:femto
 默认对应当前位数
 format  输出形式
 默认 %n%u
   
   
   
 number_to_human
 number_to_human_size
 number_to_percentage
 number_with_precision

 significant  true的话precision限制数值全体
 false的话只限定小数点以下
 默认false
 strip_insignnificant_zero  删除小数点以下的0
 默认true:
 number_to_human
 number_to_human_size
 默认false:
 number_to_percentage
 number_with_precision
   
   
   
    
   
   
   
   
   
 转换时间格式
 t.strftime(format)

 国际化用l方法
 10.4
 t.to_s()默认格式
 t.strftime(format)

 format  字符串
 %A  星期
 Sunday...
 %a  星期简称
 Sun, Mon, ... 
 %B  月
 January, ...
 %b  月简称
 Jan, Feb, ... 
 %c

Wed Jun 21 02:11:47 2017

 %d  日(01~31)
 %H  时  
 24小时制
 %I  时  
 12小时制
 %j  一年的第几天
 001~366
 %M  分 00~59
 %m  月 01~12
 %p  上下午 AM,PM
 %S   秒 00~60
 %U  周  星期天为起点
 %W  周 星期一为起点
 %w  星期几 0~6
 周日为0
 %X  时间
 %x  日期
 %Y  阳历日期 2017
 %y  阳历日期后两位 00~99
 %Z  时区 JST
 和电脑本地时区一致
 %z  时区 +900
 %%  % 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
链接类视图助手 
 生成超链接

link_to(body, url [,html_opt])

html_opt有多个的话套上{}

 参数

 body  超链接的文本
 url  超链接地址(url)
 可以用文本直接写url
 或者url_for生成复杂的
 html_opt  动作选项
 html_opt

 method  链接时候使用的http方法
 (:post, :delete, :patch, :put)
 默认get,不写就是get
 remote  用Ajax处理链接
 9.5.2
 data  独自的数据属性(

 confirm  点击链接后显示对话框
 disable_with  链接中时候表示的文本 
 属性名  id, class, style等 
 自定义文本样式

<%= link_to url  do%>

文本

<% end %>

 url写法  url_for,下一行
   
   
   
   

link_to 'sample', {controller: :hello, action: :view}, {method:
:post, data: {confirm: 'is OK?'}, style: :"color: red;"}

 生成链接地址  url_for(opts)
 opts:哈希表形式的地址指定选项

 controller  视图控制器名
 action  动作(action)名
 host  主机名(覆盖现在的主机,啥意思?)
 protocol  协议名(覆盖现有的协议)
 anchor  标签名(页内跳转的id?)
 only_path  是否返回相对地址(省略协议,主机,接口)
 不指定host默认true
 trailing_slash  末尾加不加slash/
 user  HTTP认证用的用户名
 password  HTTP认证用的密码
   
   
   
 设定默认选项  在controller处,写法和url_for参数一样
 def default_url_options(options={})
    {controller: ... ,...}
 end
   
   
   
   
   
   
   
 条件型链接  link_to_if(condition, name [,url
[,html_opt]], &block)
 link_to_unless(condition, name [,url
[,html_opt]], &block)
 条件不成立时候输出纯文本

 参数
 condition
 
 条件语句 
 name   纯文本
 url  网址
 url_for
 html_opt

method  链接时候使用的http方法
 (:post, :delete, :patch, :put)
 默认post
 remote  用Ajax处理链接
 9.5.2
 data  独自的数据属性(

 confirm  点击链接后显示对话框
 disable_with  链接中时候表示的文本 
 属性名  id, class, style等 
 &block  代码块 

   
   
   
   
   
   
   
   
   
 特殊的条件型链接  link_to_unless_current(name [, url
[,html_opt]], &block)
 链接地址是当前页面时只显示文本,否则显示超链接
 用于菜单(menu)
 生成邮箱链接  mail_to(address [, name [, opt]])

 参数

 adress  邮箱
 name  文本
 不指定的话默认邮箱名
 opt  选项,看下一行
   
   
 opt

 subject  邮件名
 body  邮件内容
 cc  抄送人
 bcc  密送人
   
   
   

mail_to 'jyoitatsu@foxmail.com', 'contact me', {subject: '来自遥远的火星',
body: %Q(这是一个网页自动邮箱测试\n请无视), cc: %q(qing97511@akane.waseda.jp)

   
   
 外部资源类视图助手
 别称  Asset助手(Asset Helper)
 暂略  javascript_include_tag,
stylesheet_link_sheet
 9 session
 图象要素  image_tag(src [,opts])

 参数

 src  图像的绝对路径或相对路径(/app/assets/images/后边的)

直接指定的默认在/app/assets/images/
 /开头的默认在/public/下

 opt  下一行
   
   
   
 opt

 alt  无法显示时候显示的文字
 省略的话自动当做去除文件后缀的字符
 size  图象尺寸
 字符串,
 宽 x 高,'100x100'
 或者width,height分别指定
 weight  宽
 height  高
 属性  其他,如class等
   
   
   
   
   
   
   
   
   
   
   
 音频视频要素  audio_tag(src [,opts])
 video_tag(src [,opts])

 src  图像的绝对路径

相对路径
     
 直接指定的默认在/app/assets/audios/
     
     
     
     
     
/app/assets/videos/
 '/'开头的默认在/public/下

opt   注:为了保证选项可用,放在/public/下

 通用  autoplay  是否自动播放
 默认false
 controls  是否表示控制狂
 默认true
 loop  是否循环播放
 默认false
 video_tag  autobuffer  是否自定缓存下载
 size  尺寸
 宽 x 高,'100x100'
 width  宽
 height  高
 poster  视频可播放前显示的图象
 这个给的是路径
   
   
 自动发现域  auto_discovery_link_tag
 ???
 p164
 设置网页图标(favicon)  favicon_link_tag([src [,opt]])

 src  地址

 相对地址  直接指定的在/app/assets/images
 '/'开头的在/public/
 绝对地址  不推荐
 opt   给<link>的属性
 获取外部资源的路径  
 stylesheet_path(src)
 audio_path(src)
 video_path(src)
 image_path(src)

也有_url,path返回相对路径,url返回绝对路径
 位置: /app/assets/.../

   
   
   
   
   
 其他视图助手
 展现数据
 debug用
 debug(obj)
 或者inspect方法
 obj: 输出的对象(object)
 用来查看model的对象是否成功传递等
 debug(@test)
 @test.inspect
 capture  @var = capture do
    ...template...
 end

 用途  展现一些需要重复利用,有没到需要部分模板(partial
template)的内容
 @var  保存模板的变量
 template  任意的模板(template)
   
   
 不含内容的标签  tag(name [,opts [,open = false [, escape -
true]]])
一般不用,略p170
 含内容的标签  content_tag(name [, content] [,opts [,escape
= true]], &block)

 name  标签名
 :p等
 content  内容
 可以用block来指定
 opts  内容的属性
 哈希
 escape  默认true
 改了容易被黑
 &block  代码块
 do {}
   
   
   
   
   
   
   
   
   
   
   
   
   
 自定义视图助手
 位置  /app/helper/xxxx_helper.rb
 rails4以前的注意  默认读取所有xxxx_helper.rb
 取消方法
 /config/application.rb
 增加一行 config.action_controller.include_all_helper
= false
 检验是否有block  block_given? ? capture(&block) :
body
 面向全体的helper  /app/helper/application_help.rb
   
   
   
   
   
   
   
   
 共同造型-layout
 位置  /app/views/layouts/
 命名规则  自带application.html.erb 没有自定义的默认用这个
 视图控制器.html.erb
 适用规则  文件放在/app/views/layouts/内部

 视图控制器为单位

 方法1

默认搜索layout文件夹内的同名layout

/app/views/layouts/视图控制器名.html.erb

例: controller是book则为book.html.erb

class HistoryController < ApplicationController
layout 'history' #默认使用同名的layout
...
end
 方法2

明确指定要用的layout

视图控制器类内部
 layout layout名
 文件放在/app/views/layouts/内部

class HistoryController < ApplicationController
layout 'sample' #文件位置: app/views/layout/sample.html.erb
...
end

● 是整个页面的模板

 以动作(action)为单位

render layout: ...
 文件放在/app/views/layouts/内部

class HistoryController < ApplicationController
def search
...
render layout: 'search' # 按action采用模板
end
end

● 是整个页面的模板

   
   
   
 模板向layout传递变量
 向外部传递变量 provide
 模板处

<provide :变量名, 值>

views/.../....html.erb

 layout处

<yield(:变量名)>

views/layouts/....html.erb

# app/views/sample.html.erb
<% provide 'sample', "test" %> # app/views/layouts/application.html.erb
<%= yield(:sample) | 'nothing exist' %>


  模板处    <%
provide :title, '

最新文章

  1. 解决vue与传统jquery插件冲突
  2. [deviceone开发]-一个简单的表单示例
  3. CSS魔法堂:hasLayout原来是这样!
  4. js返回上一步
  5. uCGUI简介
  6. 【有源汇上下界最大流】ZOJ 3229 Shoot the Bullet
  7. HDU 1203 I NEED A OFFER! 01背包
  8. svn小技巧——重定向svn diff
  9. 关于ASP.NET Web Api的HelpPage文档注释问题
  10. 【翻译】将Ext JS Grid转换为Excel表格
  11. super()方法的使用
  12. Javascript——浅谈 Event Flow
  13. Oracle中函数/过程返回多个值(结果集)
  14. 【转】python f-string
  15. 从零开始学 Web 之 BOM(四)client系列
  16. Java - Map总结
  17. mac OSX 实用快捷键
  18. [转载]学习C语言基本思路与参考书籍
  19. Open vSwitch 工作原理
  20. Nginx学习---企业级nginx环境搭建

热门文章

  1. 慕课笔记利用css进行布局【两列布局】
  2. xtu summer individual 6 D - Checkposts
  3. xtu read problem training 4 A - Moving Tables
  4. JavaEE JDBC 了解JNDI
  5. HDU 3749 Financial Crisis(点-双连通分量)
  6. 跪啃SAM
  7. string数据类型操作【四】
  8. 2017 CCPC 杭州 HDU6273J 区间修改(线段树&amp;差分数组)
  9. php删除数组中指定值的元素
  10. js 获取文件本地路径