首探:Ruby on Rails 简单了解
一. 安装
Ruby安装:https://ruby-china.org/wiki/rvm-guide
注:安装了RVM和Gem后
安装rails:
gem install rails -v 5.1.4 # 指定版本安装
二. 创建Rails项目
rails _5.1.4_ new hello_app # 创建指定rails版本的项目
1.项目目录

2.关于目录文件的解释

3.关于项目中的Gemfile中的依赖包的版本介绍
(1).如果没在 gem 指令中指定版本号,Bundler 会自动安装最新版。例如:

(2).始终安装最新版(>=)。例如:

(3).只安装最后一个数字变化的版本(~>)。例如:

注:Ruby对版本控制稍微有些严苛,和Python有很大的区别,版本不同就有可能导致程序报错
4.安装和更新这些Gem
bundle install # 安装,一般你创建项目的时候就已经给你安装了
bundle update # 更新
5.运行Rails项目
rails server

三. Rails的架构模式MVC
在初期阶段,概览一下 Rails 应用的工作方式多少会有些帮助。你可能已经注意到了, 在 Rails 应用的标准文件结构中有一个名为 app/ 的目录, 其中有三个子目录: models, views 和 con-trollers 。这表明 Rails 采用了“模型-视图-控制器”(简称 MVC)架构模式。这种模式把应用中的数据(例如用户信息)与显示数据的代码分开,这是图形用户界面(Graphical User Interface,简称 GUI)常用的架构方式。

注:和Python的Django框架的区别就是Django的架构模式为:MTV
四. 万物之本源 --- hello world!
进入文件:hello_app/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception def hello
render html: "hello, world"
end end
进入文件:hello_app/config/routes.rb
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root "application#hello" end
然后:

注:hello, world终于出来了,庆祝吧!!!
五. 整个测试小项目
1.先整个数据库postgresql
在Gemfile文件中加点东西
group :production do
gem 'pg', '0.20.0'
end
2.运行bundle
bundle install --without production
注:安装 gem 时要指定 --without production 选项,不安装生产环境使用的 gem
3.想想库中数据模型


(1).来咱先生成Users的资源
rails generate scaffold User name:string email:string
注:通过脚手架生成CURD的代码,劝你先别细看(毕竟也看不懂,对吧)。解释一点:把 scaffold 传给 rails generate 命令就可以使用 Rails 的脚手架了。传给 scaffold 的参数是资源名的单数形式(这里是 User ), 后面可以再跟着一些可选参数,指定数据模型中的字段

注:在执行的命令中加入了 name:string 和 email:string ,这样就可以实现图中的 User 模型了。注意, 没必要指定 id 字段, Rails 会自动创建并将其设为表的主键(primary key)。
(2).接下来就是迁移数据库了
rails db:migrate

注:搞定了~..~
注意,注意:在 Rails 5 之前的版本中, db:migrate 命令使用 rake 执行,而不是 rails 。因此,如果你还要维护以前的应用,一定要知道如何使用 Rake
(3).User的访问路径

注:自己去瞧瞧吧
(4).在创建第二个模型之前,试试MVC


①. 进入文件:hello_app/config/routes.rb
会发现文件内多了行东西

注:Rails 路由,为 Users 资源定义了一条规则(:users 这个写法看着很奇怪,它是一个符号, 后边在细说)
既然都到这了就把跟路由改为users的索引路由,也就是users列表

②. 进入文件:hello_app/app/controllers/users_controller.rb

注:class UsersController < ApplicationController 这种写法,在 Ruby 中这表示类继承。
瞧一瞧脚手架给你生成的代码,是不是很开心
③.进入文件:hello_app/app/views/users

注:看看脚手架给你生成的模板,看完就更开心了呐
④.脚手架生成代码不足的不足之处
• 没有验证数据
没有验证数据。 User 模型会接受空名字和无效的电子邮件地址,而不报错。
• 没有验证身份
没有验证身份。没实现登录和退出功能,随意一个用户都可以进行任何操作。
• 没有测试
没有测试。也不是完全没有,脚手架会生成一些基本的测试,不过很粗糙也不灵便,没有针对数据验证和身份验证的测试,更别说针对其他功能的测试了。
• 没样式,没布局
没样式,没布局。没有共用的样式和网站导航。
• 没真正理解
是不是很真实。
(5).生成 Microposts 资源
# 老样子
rails generate scaffold Micropost content:text user_id:integer

注:剩下的数据库迁移啥的,自己往上翻,太麻烦不写了
(6).Microposts 生成的路由

注:自己试试,然后找找脚手架给创建的其他的文件,别说找不到,上面写着呐
。。。
先到这,明天继续
首探:Ruby on Rails 简单了解的更多相关文章
- 继续:Ruby on Rails 简单了解
一. 接着上一篇继续 1.限制微博的长度 在 Rails 中实现这种限制很简单,使用验证(validation)功能即可.要限制微博的长度最多为 140 个字符 (1).打开文件:app/models ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- Linux超快速安装Ruby on Rails
Linux超快速安装Ruby on Rails 时间 2014-11-25 11:45:11 Flincllck Talk 原文 http://www.flincllck.com/quick-ins ...
- 通过Ruby On Rails 框架来更好的理解MVC框架
通过Ruby On Rails 框架来更好的理解MVC框架 1.背景 因为我在学习软件工程课程的时候,对于 MVC 框架理解不太深入,只是在理论层面上掌握,但是不知道如何在开发中使用 MVC ...
- 10个基于 Ruby on Rails 构建的顶级站点
本文系国内 ITOM 行业领军企业 OneAPM 工程师翻译整理自 Raviraj Hegde 的文章 Top Sites Built with Ruby on Rails. 就其本身而言,Ruby ...
- 如何从 0 开始学 ruby on rails (漫步版)
如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对 rails 感兴 ...
- 如何从 0 开始学 Ruby on Rails
如何从 0 开始学 Ruby on Rails (漫步版)Ruby 是一门编程语言,Ruby on Rails 是 Ruby 的一个 web 框架,简称 Rails. 有很多人对 Rails 感兴趣, ...
- (转) 如何从 0 开始学 ruby on rails (漫步版)
原文:http://readful.com/post/12322300571/0-ruby-on-rails ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架, ...
- ruby on rails on windows
这次想系统学会rails,最终目标是将redmine改造成顺手的工具,主要的手段就是开发redmine插件.虽然网上都推荐使用类Unix系统,可手头只有win7系统,就安装了. 难免会遇到这样那样的问 ...
随机推荐
- Linux Ubuntu 用c++11编译
加上: -std=c++ 例如: g++ test.
- cin.clear()与cin.sync()的使用
cin.clear()与cin.sync()使用是有先后顺序的. 他们的作用: cin.clear(); //将流中的所有状态都重设为有效值 cin.sync();//清空流 在输入错误的情况下,如果 ...
- Linux 解压小全
.gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .zip 解压:unzip FileName.zip 压缩:zi ...
- Cortex-M3 SVC与PendSV
[SVC] SVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用在上了操作系统的软件开发中.SVC用于产生系统函数的调用请求.例如,操作系统通常不允许用户程序直接访问硬件, ...
- 网络通信框架之volley
介绍 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,Htt ...
- 数据解析框架之FastJson
演示实体类 import java.util.List; public class Student { public String name; public int age; public List& ...
- 反编译中的 匿名内部类 this.val$的问题【我改】
转: 匿名内部类 this.val$的问题 一天偶尔在网上找到一个jar包,反编译后出现了如下的代码: public void defineAnonymousInnerClass(String nam ...
- 使用jdk自带工具jvisualvm 分析内存dump文件
1.获取dump文件 使用 以下命令 创建 进程PID = 16231的 dump文件,命名为 order.hprof jmap -dump:format=b,file=order.hprof 162 ...
- Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)
1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...
- jdk1.8-LinkedList源码分析
一:类的继承关系 我们看下类的继承关系 ) ) )) { ; i > index; i--) //当前记录结点等于上一节点 x = x.prev; //返回索引为index的点! return ...