表单视图助手
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
自动进行如下调用
|
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])
参数 |
|
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 [,...])
参数 |
|
%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, '
- Rails5 Route Document
创建: 2017/06/29 完成: 2017/06/29 更新: 2017/06/30 最开头的有效路径展示补充网页版 更新: 2017/07/21 修正错别字 更新: 2017/09/02 增加m ...
- Rails5 Model Document
创建: 2017/06/09 更新: 2017/06/21 更新: 2017/06/23 对待未完成的追加# TODO: 更新: 2017/06/29 修正文件名db/seed.rb ---> ...
- Rails5 Controller Document
更新: 2017/06/28 大致完成全部 更新: 2017/06/29 补充module文件命名规则 更新: 2017/07/09 补充session的设置 更新: 2018/03/06 修正ren ...
- Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径
注意:1. 模板需放在 WEB-INF 目录下2. 指定模板路径时不需要添加扩展名, Spring将自动添加 .xls 到URL 属性中.3. 在指定URL前需先设置 view 的 Applicat ...
- ElasticSearch 5学习(2)——Kibana+X-Pack介绍使用(全)
Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作.Kibana目前最新的版本5.0.2,回顾一下Kibana 3和 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- 基于HTML5 Canvas 实现矢量工控风机叶轮旋转
之前在拓扑上的应用都是些静态的图元,今天我们将在拓扑上设计一个会动的图元--叶轮旋转. 先看看最后我们实现的效果:http://www.hightopo.com/demo/fan/index.html ...
- [转]教你实践ASP.NET Core Authorization
本文转自:http://www.cnblogs.com/rohelm/p/Authorization.html 本文目录 Asp.net Core 对于授权的改动很友好,非常的灵活,本文以MVC为主, ...
- Download Excel file with Angular
源码连接(编写中) 用Angular下载后台返回的Excel文件,用Blob实现,引用FileSaver.js 后台C#代码: [WebMethod] public static byte[] Cal ...
随机推荐
- Linux基础命令回顾
前言 说到linux基础命令,网上一搜一箩筐,想学也有很多教程,如果你不幸看到此篇文章,想看就认真看完,毕竟你点进来了不是嘛? 我每次写的文章都是为了分享自己的学习成果或重要知识点,希望能帮助更多的人 ...
- 确定协议-通过分析系统阶段需要知道该系统能不能进行性能测试-Omnipeek
- python gdal库安装
yum安装了postgis之后,会安装依赖gdal centos7.5的repo中gdal为1.11.4-3版本
- BNUOJ 6719 Simpsons’ Hidden Talents
Simpsons’ Hidden Talents Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU ...
- Android二级缓存之物理存储介质上的缓存DiskLruCache
Android二级缓存之物理存储介质上的缓存DiskLruCache Android DiskLruCache属于物理性质的缓存,相较于LruCache缓存,则DiskLruCache属于And ...
- [luoguP1042] 乒乓球(模拟)
传送门 终于过了这sb题了. 当初我连这道题都A不了(╯▔皿▔)╯ 代码 #include <cstdio> #include <iostream> #define N 100 ...
- 【NOIP2017】宝藏(状压DP)
题意: 思路:n<=12,考虑状压DP 生成树中深度相同的点可以一次性转移完毕 设dp[sta,i]为已转移完sta状态的点,当前深度为i的最小花费 dp[sta or v,i+1]=min(d ...
- 自定义日志工具LogUtil
package com.pingyijinren.test; import android.util.Log; /** * Created by Administrator on 2016/5/20 ...
- I - Balancing Act POJ - 1655
Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the t ...
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
http://www.csharpwin.com/csharpspace/3766r5747.shtml 在.net 2005平台下 在使用全局hook时,总是遇见SetWindowsHookEx的返 ...
|