- 浏览: 237482 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (236)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (0)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
1. 列出所有Posts
要开始查看功能的最简单的地方应该是列举所有记录的代码了。现在我们打开 app/controllers/post_controller.rb, 看到 index 方法
- def index
- @posts = Post.all
- respond_to do |format|
- format.html # index.html.erb
- format.xml { render :xml => @posts }
- end
- end
实际上在这里有2个地方与rails2不同了,第一是查询的方式,以前我们可能会这样写
- @posts = Post.find( :all )
,那么现在这种方式完全改变了,现在多出了一个重要的类 ActivaRecord::Relation 在里面分装了大量的数据库相关的操作。第二呢,我们不用写成上面的这种代码了:
- respond_to :html , :js , :xml
- def index
- @posts = Post.all
- respond_with @posts
- end
这样很容易解释,相应的格式请求使用相应的模板,比如我们访问 http://localhost:3000/posts.xml 那么我们会得到一个xml格式的posts, 是不是很REST? 这里我们加了一个:js, 这为后面教程中使用ujs做下铺垫,那么具体的用法我们会在后面教程中给大家一一说明。
Rails把所有该动作中的实例变量传递给相应的视图,这里是 app/views/posts/index.html.erb :
- < h1 > Listing posts </ h1 >
- < table >
- < tr >
- < th > Name </ th >
- < th > Title </ th >
- < th > Content </ th >
- < th > </ th >
- < th > </ th >
- < th > </ th >
- </ tr >
- < % @posts.each do |post| % >
- < tr >
- < td > < %= post.name % > </ td >
- < td > < %= post.title % > </ td >
- < td > < %= post.content % > </ td >
- < td > < %= link_to 'Show', post % > </ td >
- < td > < %= link_to 'Edit', edit_post_path(post) % > </ td >
- < td > < %= link_to 'Destroy', post, :confirm = > 'Are you sure?', :method = > :delete % > </ td >
- </ tr >
- < % end % >
- </ table >
- < br />
- < %= link_to 'New post', new_post_path % >
该视图遍历@posts数组来显示内容以及链接,一些要注意的地方:
- link_to 绑定了特定的记录操作
- edit_post_path 与 new_post_path 实际上在你设定 routes.rb 中相关resources的时候就已经给你生成的帮助器(好像一共有7个),你可以在控制器中看到不同的这种帮助器。
这里还有一点值得注意:在先前版本的rails中你可能需要使用 <%= h post.name %> 来实现HTML转义,那么在3.0中,默认就已经是转义的了,如果你需要获得未转义的HTML,你需要这样写 <%= raw post.name %> (raw我想大家很容易理解, java中也经常有这种警告)
2. 自定义布局
当rails渲染视图给浏览器时,它会把视图放置到布局内然后在输出。在先前的rails版本中,rails g scaffold 命令会自动创建控制器指定的布局,比如 app/views/layouts/posts.html.erb, 那么在3.0中 app/views/layouts/application.html.erb 作用与所有控制器。打开你的编辑器,把该布局修改如下:
- <!DOCTYPE html >
- < html >
- < head >
- < title > Blog </ title >
- < %= stylesheet_link_tag :all % >
- < %= javascript_include_tag :defaults % >
- < %= csrf_meta_tag % >
- </ head >
- < body style = "background: #EEEEEE;" >
- < %= yield % >
- </ body >
- </ html >
现在你刷新你的页面你会发现背景变成了灰色。
3. 创建新的Post
创建一个新的Post将调用两个动作,第一个是new,它将初始化一个Post对象。
- def new
- @post = Post. new
- respond_with @post
- end
(同样我们在这里改为更简单的方式, 是不是很DRY?)
在 new.html.erb 视图中显示一个空的Post给用户:
- < h1 > New post </ h1 >
- < %= render 'form' % >
- < %= link_to 'Back', posts_path % >
<%= render 'form' %> 是我们第一次介绍Rails的局部模板。局部模板实际上也是一个视图文件,只是该文件可以被多个视图重复引用。在这种情况下,form可用于创建,更新 post,然后我们可以看到 app/views/posts/_form.html.erb:
- < %= form_for(@post) do |f| % >
- < % if @post.errors.any? % >
- < div id = "error_explanation" >
- < h2 > < %= pluralize(@post.errors.count, "error") % > prohibited this post from being saved: </ h2 >
- < ul >
- < % @post.errors.full_messages.each do |msg| % >
- < li > < %= msg % > </ li >
- < % end % >
- </ ul >
- </ div >
- < % end % >
- < div class = "field" >
- < %= f.label :name % > < br />
- < %= f.text_field :name % >
- </ div >
- < div class = "field" >
- < %= f.label :title % > < br />
- < %= f.text_field :title % >
- </ div >
- < div class = "field" >
- < %= f.label :content % > < br />
- < %= f.text_area :content % >
- </ div >
- < div class = "actions" >
- < %= f.submit % >
- </ div >
- < % end % >
局部模板可以同样接受视图的实例变量,当然也可以接受视图传递过来的变量。这里有一个另一种写法。
首先我们先稍微了解一下局部视图。
- 局部视图都以 下划线('_')开头
- 局部视图本事存在一个变量可以传递到局部视图里面,该变量是 去掉下划线,比如我的局部视图是 _form.erb, 那么在局部里面有存在一个 form 的变量, 当然还可以设定其他变量或者集合,这些我们将在后面的教程中详细学习。
现在,我们有一个 @post 变量, 那么我们可以把 render 改为 <%= render @post %>, rails很聪明,那么我们在局部视图中就会存在一个 post 变量,所以在局部视图中 把所有@post改为post,最后我们还要把 _form.html.erb 改为 _post.html.erb. 大家可以试一下,当然其实在本教程中完全没有必要,我这样说只是在为后面的教程做铺垫,这样大家就会更容易明白。
那么关于局部视图的用法我们会在后面的内容中详细的介绍。
我们现在再来看下 form_for, form_for 用于根据模型对象生成表单。比如 f.text_field :name 会告诉rails生成一个文本输入框,并且保存模型的name属性。(实际上生成的是 <input type='text' name='post[name]' />)
实际上 form_for 方法知道你是new还是edit,然后对提交按钮设置相应的value,(比如在这里new里面是create post, edit里面是update post)
如果你需要创建与模型无关的表单,可以使用 form_tag 方法
当用户点击 Create Post 按钮时,浏览器将会把表单信息提交给create方法(RAILS知道调用create方法,因为这是POST提交的):
- def create
- @post = Post. new (params[:post])
- if @post .save
- respond_with @post , :notice => 'Post was successfully created.'
- else
- render :action => 'new'
- end
- end
create方法根据传递的post参数初始化了一个post对象,保存成功以后放回用户请求的相应格式。然后把用户重定向到show页面并且设置一条成功创建的信息反馈给用户。
如果post由于验证失败等原因未能成功保存,那么控制器将把用户返回到new页面,并显示相应的错误信息。
“Post was successfully created.”保存在rails的flash哈希内,我们可以在视图层用<%=flash[:notice]%>查看(那么现在我们只需要 =notice 就可以了)
来自:http://blog.csdn.net/emerald0106/article/details/7078906
发表评论
-
OpenSSL功能集合
2020-04-22 18:59 349OpenSSL中算法记录 1、证书(X.509证书 ... -
Aliyun-OSS 使用 - 图片持久化
2020-03-03 13:04 461Aliyun OSS 使用 - 图片持久化 参考:ali ... -
Sign in with Apple REST API (Rails)
2020-02-28 12:30 1033# 文档(Apple授权登录) https://deve ... -
RQRCode插件使用
2019-03-07 15:08 277def config { le ... -
gems 列表(rails 插件) 二
2014-11-19 19:41 454rails_best_practices 最佳实现 new ... -
rails 利用 Spreadsheet 导出xls格式数据
2014-10-08 17:22 6741、链接 XXX_path(forma ... -
rvm 使用记录
2014-09-26 11:11 536rvm是一个命令行工具,可以提供一个便捷的多版本ruby环 ... -
rails3内置gem包
2014-09-10 13:14 463rails3内置gem包: ... -
rails mongoid + carrierwave
2014-06-13 18:11 622中间插件:gem 'carrierwa ... -
rails 错误提示样式
2014-06-11 10:20 482源码 # Specify the proc us ... -
ROR Callbacks函数
2014-05-13 16:49 445Active Record Callbacks: ## ... -
字符串与对象的转化
2014-03-06 10:51 619classify: http://apidock.com/ ... -
nginx+unicorn+rails 配置文件
2014-02-17 14:43 586nginx+unicorn+rails 配置文件 ... -
ruby 里的正则表示
2014-01-22 17:27 0# ruby 中的正则表示 ... -
rails中Elasticsearch的客户端Tire配置
2014-01-22 15:25 1122$ gem install tire || http ... -
rails 多表关联
2013-12-09 16:28 0rails 多表关联 class Post < ... -
rails 测试 Rspec
2013-11-14 13:32 0在Gemfile中加入: group :test, ... -
rails 评论/回复插件 acts_as_commentable_with_threading
2013-11-13 19:04 1183acts_as_commentable_with_thre ... -
rails Rspec测试框架
2013-11-03 17:46 604Rspec rails的测试框架 ... -
rails 配置详解
2013-09-16 17:05 1203配置文件(config) 在Rails中,可以 ...
相关推荐
Ruby On Rails 官方教程,这本书讲解如何使用 Ruby on Rails 框架开发应用,以及如何把应用部署到生成环境。本书使用 Rails 默认的开发工具栈开发了一个完整的社交应用(类似 Twitter)。读完本书后你将掌握如何使用...
ruby on rails 入门教程 原书第二版, rails 3.2
ruby on rails 教程源码,配合原书使用
Ruby On Rails中文教材(PDF)
Ruby on Rails入门权威经典,分享给大家,很少的资源
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 ...
Ruby on Rails Tutorial 原书第三版中文版
ruby on rails视频教程 链接:https://pan.baidu.com/s/10eKsJLllLySXk-b5muV_Qw 密码见文件
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
Ruby on Rails入门经典代码,非常适合新手学习使用
ruby on rails社区网站开发源码
ruby on rails 入门级别教程,通过学习可以很快的搭建ror的服务器并运行起来
Ruby on Rails入门经典-例子,有很多rails工程实例。
欢迎学习《Ruby on Rails 教程》。本书的目标是成为对“如果想学习使用 Ruby on Rails 进行 Web 开发,我应该从哪儿开始?”这一问题的最好答案。学习完本书的内容之后,你将具备使用 Rails 进行开发和部署 Web 程序...
ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作
全书共分17章,主要内容包括:搭建ruby on rails开发平台、ruby语言的基础知识(像控制语句、面向对象、数组和块等)、文件处理、数据库持久化、rails控制器和路由、视图模板以及发送邮件和ajax等。 《ruby on rails ...