表单视图助手
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 ...
随机推荐
- UVA 221 城市化地图(离散化思想)
题意: 给出若干个栋楼俯视图的坐标和面积,求从俯视图的南面(可以视为正视图)看过去到底能看到多少栋楼. 输入第一个n说明有n栋楼,然后输入5个实数(注意是实数),分别是楼的左下角坐标(x,y), 然后 ...
- [bzoj1208][HNOI2004][宠物收养所] (平衡树)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- 什么是CPU密集型、IO密集型?(转发)
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/ ...
- python之更加抽象 2014-4-6
#更加抽象 12:50pm- 14:50 p112- 1.对象的魔力 多态 如count 在多种数据类型中都可以实现计数的功能 封装 对全局作用域中其他区域隐藏多余信息的原则 继承2.类和类型 创建类 ...
- shit IE & no table `border-collapse: collapse;`
shit IE no table border-collapse: collapse; /* IE & shit table & border-collapse: collapse; ...
- hdu 4091 数学思维题贪心
/* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...
- segv & mini coredump 调研
1. mini coredump a. segv http://zh.scribd.com/doc/3726406/Crash-N-Burn-Writing-Linux-applica ...
- Thinkphp5.0 的Model模型
Thinkphp5.0 的Model模型 新建user模型User.php: <?php namespace app\index\model; use think\Model; class Us ...
- SharedPreferences保存用户偏好参数
package com.example.administrator.myapplication; import android.content.Context; import android.cont ...
- [bzoj2463][中山市选2009]谁能赢呢?_博弈论
博弈论 bzoj-2463 中山市选-2009 题目大意:题目链接. 注释:略. 想法: 如果$n$是偶数的话就可以被多米诺骨牌恰好覆盖,这样的话只需要先手先走向(1,1)对应的第二段,后者必定会将棋 ...
|