Rails读书笔记第二章
来源:互联网 发布:苹果手机照片传不到mac 编辑:程序博客网 时间:2024/05/20 06:24
新建一个网络应用
在工作目录,输入:
rails new MyApp
这样Rails就把整个应用的框架搭建起来了。
进入MyApp文件夹,可以看到以下目录结构:- app:包含应用的MVC,helper,mailers,assets
- bin:包含了建立、分布和运行应用的脚本
- config:包含了route、database等配置文件
- config.ru:rake的配置文件
- db:database的schema和migrate
- Gemfile:应用的gem的dependencies
- lib:外部module
- log:应用的log
- public:呈现给用户的目录,包含静态文件和assets
- Rakefile:rake的命令
- test:test文件
- tmp:临时文件如cache、pid、session等
- vendor:第三方的gem
使用下面命令可以查看一下这个应用的信息:
rake aboutrake是rails提供的一个脚本命令工具,可以执行很多功能。
运行应用
现在在MyApp文件夹下就可以启动服务器:
rails srails serverrails s -b 0.0.0.0可以通过下面的命令查看server的启动参数:
rails server -h其中-b是bind,bind到localhost和routable IP address(internet上别人可以访问的地址)。
以下的IP地址是保留地址:
- class A reserved space 10.0.0.0/8
- class B reserved space 172.16.0.0/12
- class C reserved space 192.168.0.0/16
- class E reserved for research 240.0.0.0
启动中会显示:
=> Booting WEBrick=> Rails 4.2.4 application starting in development on http://localhost:3000WEBrick是ruby的web server,打开localhost:3000就是主页。
MVC
作为一个MVC框架,rails从浏览器接收到请求,解析请求并找到一个controller,然后在这个controller中调用一个动作方法(action method)。这个controller就会产生一个view把结果返回给用户。controller和view之间是通过route来定义连接的。下面我们创建一个名叫Say的controller,包含了hello和goodbye两种动作:
rails generate controller Say hello goodbye这样就生成了controller,同时也生成了对应的view,并且通过route连接在了一起。此时就可以访问http://localhost:3000/say/hello或者http://localhost:3000/say/goodbye了。
此时如果出现execjs错误,则下载安装node.js。
首先来看controller,代码在app/controllers/say_controller.rb这个文件中:
class SayController < ApplicationController def hello end def goodbye endendSayController继承自ApplicationController,包含了hello和goodbye这两个方法。
再来看view,代码在app/views/say下,其中hello.html.erb文件就对应了http://localhost:3000/say/hello这个url,而goodbye.html.erb文件对应了http://localhost:3000/say/goodbye这个url。
例如hello.html.erb文件内容如下:
<h1>Hello from Rails! </h1>
此时在routes.rb文件中有如下内容:
Rails.application.routes.draw do get 'say/hello' get 'say/goodbye'即捕获了say/hello和say/goodbye动作。
从上面可以看出,Rails使用文件名来匹配这些动作,在SayController定义了hello和goodbye动作,在view里生成了hello和goodbye的网页,而在routes里捕获了hello和goodbye的动作。
ERB
erb文件将ruby代码嵌入到了文本中,并通过ERB系统将ruby代码执行并转换。<% ruby代码 %> , <%= ruby返回结果%>。
例如hello.html.erb是将ruby代码嵌入到了html文件中:
<h1>Hello from Rails! </h1><p> It is now <%= Time.now %></p>这样<%= Time.now %>就会返回一个时间的string。
不过通常view是通过controller来控制的,把time作为一个参数从controller传到view来。
因此在say_controller.rb中添加一个成员变量time:
class SayController < ApplicationController def hello @time = Time.now end def goodbye endend然后在hello.html.erb中使用这个time变量:
<h1>Hello from Rails! </h1><p> It is now <%= @time %></p>在rails框架中,view可以直接使用controller的变量。
link_to
为了实现在hello页面和goodbye页面之前切换,可以直接分别加入hyperlinke:
在hello.html.erb中:
<p>Say <a href="/say/goodbye">Goodbye</a>!</p>在goodbye.html.erb中:
<p>Say <a href="/say/hello">Hello</a>!</p>但这种直接引用的方法并不是一个好方法,最好是使用Rails的template helper的方法来创建一个指向动作的hyperlink。
在hello.html.erb中:
<h1>Hello from Rails! </h1><p> It is now <%= @time %></p><p> Time to say <%= link_to "Goodbye", say_goodbye_path %>!</p>这里使用了link_to方法,链接显示的文字是Goodbye,而say_goodbye_path是Rails提供的指向goodbye动作的URL(say_goodbye_path等价于/say/goodbye的路径)。由此就创建了一个动作链接。
添加一个方法
我们在创建SayController时定义了hello和goodbye两个动作,现在我们想添加一个动作叫filenames来显示当前文件夹下的文件。
首先我们在say_controller.rb中添加filenames这个方法:
class SayController < ApplicationController def hello @time = Time.now end def goodbye end def filenames @files = Dir.glob('*') return @files end end这里新建了一个files的成员变量来存储文件。
然后在app/views/say下新建filenames.html.erb这个view文件:
<h1>Files in the current directory</h1><p> The files in the current directory are: </p><ul> <% for file in @files %> <li><%= file; %></li> <% end %></ul>最后在routes.rb中将这个方法和view链接起来:
Rails.application.routes.draw do get 'say/hello' get 'say/goodbye' get 'say/filenames'重启server后,就可以访问http://localhost:3000/say/filenames,列举出出当前目录的文件名。
0 0
- Rails读书笔记第二章
- Rails读书笔记第三章
- Rails读书笔记第四章
- Rails读书笔记第六章
- Rails读书笔记第七章
- Rails读书笔记第七章
- Rails读书笔记第九章
- 汇编语言读书笔记 第二章
- UNP读书笔记第二章
- Python读书笔记-第二章
- 汇编读书笔记 -- 第二章
- CSAPP读书笔记第二章:
- 《数据仓库》读书笔记:第二章
- prml读书笔记-第二章
- Python基础教程第二版读书笔记-第二章
- C++ Pirmer 读书笔记-第二章
- C++ Pirmer 读书笔记-第二章
- PHP程序设计读书笔记第二章
- PHP第一季视频教程.李炎恢.学习笔记(三)(第2章 基本语法(2))
- LeetCode 题解(271) : Word Pattern II
- Rails读书笔记第一章
- txt文档内容入mysql
- grunt快速上手(转)
- Rails读书笔记第二章
- excel 宏(VB)实现复制一列并按第二列的单元格长度排序
- excel减肥过滤广告
- 合并子目录所有文本文件的批处理
- [机器学习] Adaboost算法流程及原理推导
- LeetCode 题解(272) : Zigzag Iterator
- Container With Most Water
- 张益唐的有用性
- Android ViewPager前两页显示空白