1. 创建工程

rails new blog

2.查看下文件结构

tree

输出如下,请留意红圈中的部分。

  • Gemfile, 用来管理应用程序的gems, 有点类似于python的包,有专门的网站来查找gems: https://rubygems.org/
  • app,( application)这将会是你主要花精力的地方,
  • app/assets ,这个下面放的是图片,脚本,样式等静态文件。
  • app/controllers, app/models, app/views , 这三个就是所谓的MVC中的C,M,V
  • config/routes.rb, 这个有点类似于django中的url文件,配置url与controller的actions之间的对应关系。
  • db/seeds.rb, 数据库的创建和迁移(migration)文件所在地。

此外还有一些比较有意思的地方:

  • config/database.yml  , 数据库的配置文件,这里配置了开发/测试/发布数据库
  • 在建立了模型后,默认情况下,db目录下面会有一个development.sqlite3数据库文件
  • test/fixtures下面,在建立模型并migrate后,会生成默认的测试数据: 模型.yml

3. 添加一个名为posts的controller。

创建控制器

按照约定:controller需要用复数表述,首先进入到工程目录,然后创建controller,如下

cd blog
rails g controller posts

遇到错误:

/usr/local/rvm/gems/ruby-2.1.5/gems/execjs-2.2.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

报错原因:把 CoffeeScript 编译成 JavaScript 需要 JavaScript 运行时,如果没有运行时,会报错,提示没有 execjs。Mac OS X 和 Windows 一般都提供了 JavaScript 运行时。Rails 生成的 Gemfile 中,安装 therubyracer gem 的代码被注释掉了,如果需要使用这个 gem,请把前面的注释去掉。在 JRuby 中推荐使用 therubyracer。在 JRuby 中生成的 Gemfile 已经包含了这个 gem。所有支持的运行时参见 ExecJS。

编辑 blog/Gemfile 文件,取消注释,如下

gem 'therubyracer',  platforms: :ruby#enable it

然后运行 sudo bindle install 安装依赖项。或者直接

 gem install therubyracer

gem相当于python的easy_install。

再来一次生成controller,正常输出如下:

      create  app/controllers/posts_controller.rb
invoke erb
create app/views/posts
invoke test_unit
create test/controllers/posts_controller_test.rb
invoke helper
create app/helpers/posts_helper.rb
invoke test_unit
create test/helpers/posts_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/posts.js.coffee
invoke scss
create app/assets/stylesheets/posts.css.scss

添加动作action

编辑app/controllers/posts_controller.rb文件,添加index动作(动作可以理解为页面),这个是访问posts/路径的默认页面,如下:

class PostsController < ApplicationController
def index
end
end

添加view

定义了动作,就等于有了一个index页,接下来,需要指定这个页咋渲染,在app/views/posts路径下面新建一个 index.html.erb (默认与动作相同的名字来命名views, erb 指的是 embed ruby, 在这个文件里面可以使用html/js/css/embed ruby)。

编辑内容如下:

<h1>hello world!</h1>
<p>welcome to tommy's blog</p>

添加路由映射

编辑文件:config/routes.rb文件,添加如下路由映射:

Rails.application.routes.draw do
resources :posts

运行服务

接下来运行模拟服务器:

rails s

 

然后可以访问路径: http://localhost:3000/posts  看看输出。如下图:

转载请注明本文来自: http://www.cnblogs.com/Tommy-Yu/p/4140273.html,谢谢!

[ruby on rails] 跟我学之(2)HelloWorld的更多相关文章

  1. [ruby on rails] 跟我学之(9)删除数据

    首先需要在index页加个删除链接,并提供一个删除的确认,用户确认删除时,直接删除数据. 修改views 修改 app/views/posts/index.html.erb,如下: <h1> ...

  2. [ruby on rails] 跟我学之(8)修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  3. [ruby on rails] 跟我学之(7)创建数据

    通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个 ...

  4. [ruby on rails] 跟我学之(6)显示指定数据

    根据<[ruby on rails] 跟我学之路由映射>,我们知道,可以访问 GET    /posts/:id(.:format) 来显示具体的对象. 1. 修改action 修改 ap ...

  5. [ruby on rails] 跟我学之(5)显示所有数据

    之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...

  6. [ruby on rails] 跟我学之(4)路由映射

    前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...

  7. [ruby on rails] 跟我学之(3)基于rails console的查增删改操作

    本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...

  8. [ruby on rails] 跟我学之(1)环境搭建

    环境: ubuntu 12.04 (64bit) 代理: 自己最好弄一个代理. 环境配置指令如下: sudo apt-get update sudo apt-get install curl \cur ...

  9. [ruby on rails] 跟我学之(10)数据输入验证

    这里简单加上几个验证,非空,最小长度,唯一 修改模型 修改app/models/post.rb文件,如下: class Post < ActiveRecord::Base #attr_acces ...

随机推荐

  1. java5中原子型操作类的应用

    java.util.concurrent.atomic包中提供了对基本数据类型,对数组中的基本数据类型和类中的基本数据类型的操作.详情见API. 下面实例简单介绍AtomicInteger类的使用: ...

  2. OC基础--self关键字&super关键字

    PS:OC中的self关键字可以与C#中的this关键字区分记忆,虽然区别还是很大的. OC中的super关键字指的是父类指针 一.self关键字必须了解的知识: 1.使用场合:只能用在方法中(对象方 ...

  3. ThinkPHP多表联合查询的常用方法

    1.原生查询示例: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_t ...

  4. python多态

    多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式.在处理多态对象时,只需要关注它的接口即可,python中并不需要显示的编写(像Java一 ...

  5. MySQL tips (日期时间操作/concat 等)

    1.  Query结尾要加一个分号: 2.  数据库和表 SHOW DATABASES;    USE YOUR_DB; SHOW TABLES; SHOW COLUMNS FROM study或者D ...

  6. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  7. 浅议SNMP安全、SNMP协议、网络管理学习

    相关学习资料 tcp-ip详解卷1:协议.pdf(重点看25章SNMP部分) http://www.rfc-editor.org/rfc/rfc1213.txt http://www.rfc-edit ...

  8. C#获取本机IP且过滤非真实网卡(如虚拟机网卡)

    参考了网上的文章,具体地址不记得了. 下面的方法可以过滤掉虚拟机的网卡等无效网卡,进而只留下真实的网卡. using System; using System.Collections.Generic; ...

  9. eclipse中新建python项目报错:Project interpreter not specified

    eclipse-windows-preferences-python

  10. IOC 构造函数注入vs属性注入

    1.不管是构造函数注入还是属性注入,都要先把对象给new 出来,构造函数应该也是public.2.一般使用 配置文件,属性注入,不用使用特性,直接配置,初始化或依赖,凡是注入的,都要有访问权限,pub ...