Posted on:
Last modified:
因为工作的关系,需要接受一个 RoR 的项目,花一下午时间学习一下 Ruby 和 Rails. 还好在大学的时候读过关于 Ruby 的一本书,语法基本还是知道一些的。
Rails 是一个典型的 MVC 的 web 框架。
Controller 需要继承 ApplicationController 基类。对于每一个路径 http://xxx.com/my-controller/action 都对应了 app/controllers/my_controller.rb 下的 MyController 类的 action 方法,然后会渲染 app/views/my-contoller/action.html.erb 文件。即使方法是空的,也会渲染对应的 erb/haml 模板。
rails 会把 controller 中所有的类变量都传递到模板中,所以如果有需要渲染的变量,直接使用类变量就行了,而不用显式传递。
可以使用 before_action 来增加一些钩子函数,比如要求登录之类的。
lib/tasks/*.rake 中存放的是可以通过 rake 调用的任务。config/routes.rb 文件config/schedule.rb 文件存放 whenever 管理的 cron 任务。在 config/routes.rb 中的 DSL 可以使用不同的方法定义路由:
resources 定义一个典型的 REST 资源。Ruby 的 Slice 和 Python 是不同的,有以下两点:
.. 而不是 :. string[0..8]一般语言中会使用 is_valid 来表示一个布尔值,而 ruby 中习惯使用 valid?, 其中的 ? 就是一个普通的字符。
len(s) -> s.length
s.replace() -> s.sub() or s.gsub()
f"hello {name}" -> hell #{name}
我实在不知道符号这个东西有什么用处,string 本身不就应该是 internized 的么
ruby 算是比较有创新精神,可以使用 n.times 来表示一个循环。
5.times do
puts "Hello, World!"
end块还可以接收参数,使用 |
5.times do |i|
puts "#{i}: Hello, World!"
end在 Python 中如果你输入 import braces 那么会得到 not a chance 错误,但是在 ruby 中,我们是可以使用大括号的。😂
<< 可以用来 append
.sort 不会改变原数组。
还可以使用 .each + 块来遍历数组。
字典
使用字符串作为 key
prices = {"apples" => 3, "oranges" => 1, "carrots" => 12}使用符号作为 key
{apples: 3, oranges: 1, carrots: 12}ruby 中使用 if/elsif/else 语句,注意其中多了一个 s.
ruby 中使用 && 和 || 来表示 and 和 or.
nil 表示 None.
Ruby 中字符串是可变的
Ruby 中除了 false, nil 以外都是真的,也就是 0 "" 也是真的
class 中使用 attr_accessor 来设置属性。方法签名中不需要使用 self 参数,函数体中也不需要使用 self 来访问属性。使用 attr_accessor 定义的属性可以认为是 public 的,而如果想要 private 的属性的话,可以使用 @var 语法,@variable 不需要声明,直接使用就行。
创建实例的话需要使用 .new 方法。MyClass.new. Ruby 中的构造函数是 initialize, 相比 __init__ 来说,太难拼写了。
class Student
attr_accessor :first_name, :last_name, :primary_phone_number
def introduction # 这里没有 self
puts "Hi, I'm #{first_name}!" # 这里不用 self
end
end
frank = Student.new
puts frank.first_name
frank.first_name = "Max"
frank.introduction # 函数调用不用括号Ruby 中的 require 使用来实现其他语言的 inlcude 或者 import 操作的,而 include 关键字是用来实现 mixin 的。
Ruby 中使用 begin/rescue/ensure 来表示 try/except/finally 的逻辑。有个语法糖,如果在函数中的话,可以直接以 def 未开始,而不用显式地 begin 了。
begin
# ...
rescue
# ...
ensure
# this always runs
end© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站