Rails5 Controller Document
请求(request)信息 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取请求信息 |
params[:参数名]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定可以获取的数据 黑白名单 |
params.require(model).permit(attr,...)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取头信息 |
request.headers['...']
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取头信息和服务器信息的专用方法 |
#TODO: F2634985-5CD9-4CBD-B8E0-C7B7A4184923 p333~334 因为上面的也可以用,暂时省略 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
文件上传 |
传上的文件的接收 form_tag/for ...multipart: true do ... submit_tag ... end
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上传的文件方法 |
类型UploadedFile
File.extname(你的文件.original_filename).downcase |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
文件保存 本地系统 |
File.open("/Users/xxxx/Desktop/github/Learning-Ruby/File/#{name}", 'wb') do |file| file.write(upload.read) end |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
文件保存 数据库 |
# TODO: p337~339 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取文件后缀 | File.extname(你的文件.original_filename).downcase | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
回应(response)的操作 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
response | 返回处理的结果等 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
概览 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
render(1) |
最常用。 呼出模板的用法
注意: render默认放回200(:ok)状态码,可以通过status: 选项自己指定 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
render(2) |
直接输出 只用在debug 会使layout无效
注意: render默认放回200(:ok)状态码,可以通过status: 选项自己指定 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
head |
只返回状态码 head status [, opt]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redirect_to |
返回结果并且重定向 redirect_to url [,status=302]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redirect_back |
重定向到前一个(Referer头的前一个) redirect_back fallback_location: url fallback_location: url 前一个不存在的时候重定向的目的地
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
send_file send_data |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(补充) 输出日志 logger |
p350
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTML以外的回应处理 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
概要 |
将处理结果以XML/JSON形式输出 用途: 普通的回应是给人看的,而这种回应是用来把数据输出给其他app |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
生成xml/json |
注: 一次可以指定多个不同的model,不用完全一样 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JBuild生成JSON |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Build生成XML |
要在Gemfile最后一句 gem 'activemodel-serializers-xml' 然后运行bundle install
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
根据格式要求输出 |
respond_to_do |format| format.type { statements } ... end
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
状态管理 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Rails可用的状态管理方法 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cookie | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设置Cookie值 |
cookies[:name] = {key: value, ...}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除cookie |
cookies.delete(:key) 对于设置了domain/path的,需要明确指定domain/path cookies.delete(:key, path: '...') |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
读取 | cookies[:key] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Session | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
概要 |
默认情况下使用cookie来保存(CookieStore) 和Cookie基本上一样 不同点: 可以自由改变保存处
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设定session值 |
session[:key] = value session默认有效期限是关闭浏览器前 保存方法,期限等在/app/config/ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设定session本身 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
读取 |
sample = session[:key] 注: 得到的是以字符串为标签的哈希表 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除 | session[:key] = nil | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
全部删除 | reset_session | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Flash | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
概要 |
只对当前和下一个请求有效 主要用于确认信息等情况,如填完提交了表格提示保存成功等等 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用例 |
redirect_to @sample, notice: '...' 两个基本一样的
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设定值 | flash[:key] = value | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取值 | flash[:key] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
相关方法 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
筛选(filter) 预处理与后处理 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
前或后执行 |
before_action :method [, ...] after_action :method [, ...] 使用的方法用private藏起来 可以用多个方法,直接往后加 用render/redirect_to或者发出异常来中止before_action
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
前后执行 |
around_action :method [, ...] 使用的方法用private藏起来 注: 用yield来表明action的执行时刻 例 around_action :test private |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
敲过部分筛选处理 |
母类---子类---孙类
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Rails自带认证的问题 |
①.只能用自带的认证对话框 ②.没办法logout,浏览器关闭前一直是登陆状态 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用户认证 Rails自带的简单认证 |
authenticate_or_request_with_http_basic(realm) do |name, passwd|login_procedureend 返回true/false
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用户认证 Rails自带的更安全认证 |
authenticate_or_request_with_http_digest(realm) do |name|... end 返回密码,如果符合就成功,不符合就失败 例: before_action :auth_ REALM = 'SAMPLE' USER = { name: 'name', password: '1234'} def auth_ authenticate_or_request_with_http_digest(REALM) do |n|USER[:password] end |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
实现认证密码 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
安装bcrypt库 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用brcypt库 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
定义共有的动作(application controller) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
位置 | /app/controller/application_controller.rb | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作用 |
所以视图控制器的母类 用于定义 子类需要的帮助类方法(helper method) 大部分视图控制器使用的筛选功能(filter) 应用全体的设定 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
异常处理 |
不应该在每一个具体的视图控制器里,应该在母类里 rescue_from except, with: rescuer
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
防范 跨站请求伪造(CSRF) Cross-site request fogery |
protect_from_fogery with: :...
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
按设备分配页面 |
设备信息 request.headers['User-Agent']
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
增加flash变量 |
add_flash_type(type, ...) redirect_to里面有两个,notice, alert 增加除此之外的用 add_flash_type(:test1, :test2, ...)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
多个视图控制器/模型共有的逻辑 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
放置位置 |
/app/controllers/concerns/ /app/models/concerns |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
写法 p399 |
module nameextend ActiveSupport::Concern # 只含有实例方法的话可以省略extend ActiveSupport::Concern included do#call_clazz # 呼出包含此模块的类的类方法 endmodule ClassMethods#clazz # 类方法的定义 end#instance # 实例方法 end
例子 module Login extend ActiveSupport::Concern included do before_action :login end private def login #render plain: 'login module test successfully' end end |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用 | include Module-Name | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
文件命名规则 |
字母要一直,单词之间_间隔,module名的单词首字母大写 如 test.rb ---> module Test ni_hao.rb ---> module NiHao |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
转载于:https://www.cnblogs.com/lancgg/p/8281786.html
Rails5 Controller Document相关推荐
- 前端md转html添加样式_前端文档站点搭建方案
? 这是第 46篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队关注我们吧- 本文首发于政采云前端团队博客:前端文档站点搭建方案 https://www.zoo.team/article ...
- AJAX基础电子教程
一. 什么是AJAX? 这个名字代表了异步JavaScript+XMLHTTPRequest,并且意味着你可以在基于浏览器的JavaScript和服务器之间建立套接字通讯.其实AJAX并不是一种新技术 ...
- 前端框架-Angular.js
前端的功能与单页应用 就webapp开发而言,前端实现的功能主要有: -实现UI(渲染出用户可见的视图和各种功能组件) -对用户的操作(事件)做出反应 -实现业务逻辑 -实现页面路由 -与服务器端交互 ...
- 论坛通用架构设计文档
1.解决方案概述 1.1 假设条件: 考虑本论坛的快速发展, 按最理想情况, 可能三年内总主题, 会到接近千万水平. 为保证架构的扩展性, 本项目假设主题数为最大值的十倍, 作为架构设计参考数据量. ...
- ArangoDB简单入门
一.安装与启动 1.进入到某个目录 cd /home/neunhoef/ 2 获取包 wget https://download.arangodb.com/arangodb34/Community/L ...
- AngularJs $anchorScroll、$controller、$document
$anchorScroll 根据HTML5的规则,当调用这个函数时,它检查当前的url的hash值并且滚动到相应的元素. 监听$location.hash()并且滚动到url指定的锚点的地方.可以通过 ...
- spring中controller与jsp之间的那些事儿
本文是我在学习Java EE过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习. Spring MVC数据绑定和响应 前言 一.简单数据绑定 1.1.默认数据绑定 1. ...
- Js传递数组参数到后台controller的方式
分享一篇js传递数组参数到后台controller的方法,具有很好的参考价值,希望对大家有所帮助. 传递参数传递字符串,所以要把数组转换为字符串, var arr=[1,23,34,5]; var s ...
- 067_VFPage中Js与controller交互方式(二) RemoteAction
上篇文章介绍了Toolkit API,是一种js的前台写法 同步调用格式: sforce.connection.method("argument1","argument2 ...
最新文章
- Mybatis 基本配置, 面向接口
- 谷歌提出「卷积+注意力」新模型,超越ResNet最强变体!
- 201621123028《Java程序设计》第一周学习总结
- python下载免费吗-python实现文件下载的方法总结
- 【数据挖掘笔记十一】高级聚类分析
- Unity: .NET下的依赖注入容器
- vue路由中设置linkActiveClass
- 支持CDS view的SAP ALV IDA - 使用前提
- P1850-换教室【数学期望,dp,Floyd】
- UC浏览器如何调节手机屏幕亮度
- 关于Golang的4个小秘密
- Python3中的魔术方法汇总
- 事件类型-UI事件、焦点事件
- C#递归方法遍历目录及子目录
- 拓端tecdat|数据度量消费贷款—消费者的考虑因素数据分析
- 攻防世界-WEB-新手-command_execution
- 嗨格式视频转换器全新上线,一个音视频转换神器
- keil(MDK) 5官方下载教程
- 2022-2027年(新版)中国石墨烯行业竞争态势及发展前景预测报告
- 8脚 tja1050t_TJA1050TD-T_PDF技术资料下载_货期信息(1/10)_NXP - 万联芯城
热门文章
- wcf系列---- binding的使用(1)
- 挣脱浏览器的束缚(7) - CrossSubDomainExecutor
- Caffe2——cifar10数据集创建lmdb或leveldb类型的数据
- PHP 一键安装扩展的程序-(Windows 系统)
- mastered skills
- 如何让PhpStorm同时打开多个项目?(多项目并存的问题)
- ckeditor 4.2.1_演示 ckeditor 上传插入图片
- 1.3 计划需求控制
- Javascript模块化编程:AMD规范
- OSPF-LSA数据包头