Ruby基本语法知识

Posted by 石坤 on 2018-09-21

Ruby基本语法知识

  1. Array(阵列)

fruits = [“kiwi”,”plum”]

  1. class(类别) 类似于Python中的type

进入IRB

1
2
3
4
> 7.class
=> Fixnum
> "kiwi".class
=> String

  1. class有method可以被调用

    1
    2
    3
    4
    fruits.length  (字符串长度)
    fruits.frist
    fruits.methods (输入该类class的所有method)
    fruits.sort (排序)
  2. 循环

    1
    2
    3
    fruits.each do |fruit|
    puts fruit
    end
  3. 条件判断

1
2
3
if 2 > 1
puts "2>1"
end
  1. 函数

    1
    2
    3
    4
    5
    def pluralize(word)
    word + "s"
    end

    pluralize("wiki")
  2. 输出
    puts "something"

特点, ruby依靠后面end来判断语句是否结束了.

pipeline 管道;

项目文件归类

app/: 最重要的文件夹, 包括了controllers, models, views
config/: routes修改
db/: 数据库
assets/: css, 图片, js等静态文件
public/: 这是唯一一个放什么就出现什么的资料夹

MVC模型

Rails中的MVC模型:
Model, view, Controller

Model 数据层
Controller 控制层
View 展示层

注意: Rails中的View与Django中的View意义完全不同

Rails 架构使用

rails generate scffold topic title:string description:text

数据库定义

rails generate model vote topic_id:integer

数据库中对象与对象之间的关系; 在Django中自己使用的方法有问题, 没有使用过多对多.
会自动生成MVC

迁移数据库

rake db:migrate
告诉 Rails 更新资料库来建立一个用来储存新的 Model 的表格(Table)。

常用的web操作
C – create
R – Read
U – Update
D – Destroy

Create, Update, Destroy之后需要有提示
Destroy之前需要alert, 提示要求确认
这四个基本操作, 所用的request method不同

数据测试

相当于使用Django后台管理进行数据测试, 看数据库是否按照自己的想法生成
rails c
进入rails console, 如此便可以操控数据库里面的数据了
class使用首字母大写进行调用, 与Django相同
Topic.count count方法返回数量

1
2
3
4
5
6
my_topic = Topic.first 
my_topic.update_attributes(title: "Edited in the console") # 修改数据
my_topic.votes.create # 新建数据
my_topic.votes.count
my_topic.votes.first.destory # 删除数据
exit # 退出console

association 联合; 同事

注意对象与实例的区别以及对应的method的不同

对象: 是一类事物的抽象, 也可以理解为实例的聚合体
实例: 对象的具体化
对象与实例的关系:
先定义对象, 指明其属性及方法; 然后可以声明一个实例, 顺便给这个实例的属性赋值.
在ruby中对象与实例的method表
IMAGE

Model class/association 的method

1
2
3
4
5
6
7
8
9
Topic.first
Topic.last
Topic.all
Topic.countye'i
Topic.find_by_id(5)
Topic.destroy_all
my_topic.votes.count
my_topic.votes.create
my_topic.votes.destroy_all

Model instance 的 methods

1
2
3
4
5
6
my_topic.title
my_topic.update_attributes(title:"New title")
my_topic.save
my_topic.save!
my_topic.destroy
my_topic.votes.first.destroy

详情:
https://guides.rubyonrails.org/active_record_querying.html

nil 出自法语”nihil”意味无物, 有时候, 代表数字0; 在编程中, nil指代一个空集合或者一个列表中没有任何实体. 可以和null互换使用.

只有修改教程里面的代码, 才能真正的学会编程
如果只是照着教程一步一步做, 永远学不会, 反而会沉迷在自己什么的学会了假象之中
eg. 之前是投票+1, 可以试着加一个扣分-1的功能
以此监测自己是否真的学会了

排序英文:
sort
order
如果搜索sort没有的话, 试试order

待完成

根据投票分数排序topics
新增一个 ‘about’ 页面,并将连结放在 topics 列表的最下方。记得也要在 About 页面上放置回 Topics 列表的连结,以免使用者迷路。

自己目前不清楚rails的套路, 无法添加简单的静态页面到路由

输出路由配置

rake routes
用来检查route是否配置正确

开发流程

  1. 先在后台测试是否完成了该功能
  2. 如果完成了, 再考虑与用户进行交互. 而不是相反

eg. 需求. 加一个投票的按钮, 点一下就+1; 先在后台把数据库设计好, 然后使用代码, 手动完成”+1”的操作, 如果行得通, 证明数据库没问题; 然后在Controller中(控制层)进行测试, 配合指定的URL, 访问一次, 就+1; 如果也没问题; 在展示层, 设计button.
如此一来, 就把点击按钮这个操作, 拆分成三个步骤, 方便debug. 把大问题分解为小问题.

pluralize 使成复数形式

erb模板语言

<% %> loop或者condition statement
<%= %> 普通变量

习惯

在干事情之前, 清理一下电脑桌面, 把不必要的Chrome书签移到其他桌面, 把无关的应用也移到其他桌面. 保持使用的两个工作桌面的简洁, 打开勿扰模式, 把手机和IPad放在视线之外, 减少可能让自己分心的一切事物. 一般只留三个东西. Chrome浏览器; 记笔记的软件; 编译器(或编辑器)