Ruby on Rails Tutorial 第四章笔记 Rails 背后的 Ruby
作
者在这一章介绍了 Ruby 语言的数据结构(字符串,数组,哈希等等的相关操作),以及 Ruby 类,函数的概念,并通过这些概念来说明 Ruby 是这样来支撑 Rails 的:
- 通过 helpers(辅助方法),包括内置和自定义的方法.
- 通过 Ruby class 的继承关系,实例变量等.
尽管如此,作者仍然也强调了 Rails 的特性:
Rails 是用 Ruby 编写的,但 Rails 不是 Ruby. 有些 Rails 类就像普通的 Ruby 类一样,不过也有些得益于 Rails 的强大功能. Rails 是一门单独的学问,应该跟 Ruby 分开学习和理解.
helpers—— 辅助方法
辅助方法分为两种: Rails 内置的辅助方法 & 自定义的辅助方法.
Rails 内置辅助方法
内置的辅助方法可以直接进行调用.
如在 app/views/layouts/application.html.erb
中,有代码如下:<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
在 Ruby 中,函数的括号可以省略;同时,散列如果是最后一个参数,那么散列的花括号可以省略.
自定义辅助方法
位置: app/helpers/application_helper.rb
功能: 会在所有的控制器,视图,测试中能够直接调用该辅助方法;
但如果某个辅助方法是针对特定的控制器的,则应该放入该控制器的辅助方法中. 如 StaticPages 的控制器的辅助方法,位置在 app/helpers/application_helper.rb
原理: _helper.rb 文件开头有 module ApllicationHelper, 辅助方法所在的 module 会由 Rails 自动引入.
如果是自己编写的函数的模块,可以使用 include 把模块插入其他类中.
Ruby 类——之实例变量
下面以作者创建的 User 这个 class 来说明:
class User attr_accessor :name, :email def initiate(attribute = {}) @name = attribute[:name] @email = attribute[:email] end end
在这个 class 的第一行中, attr_accessor 用于定义 getter 和 setter, 读取和设定 @name, @email 实例变量.
在 Ruby 中, 实例变量可以跨函数使用,
在 Rails 中, 示例变量能在视图中可用.