Ruby on Rails Tutorial 第四章笔记 Rails 背后的 Ruby

者在这一章介绍了 Ruby 语言的数据结构(字符串,数组,哈希等等的相关操作),以及 Ruby 类,函数的概念,并通过这些概念来说明 Ruby 是这样来支撑 Rails 的:

  1. 通过 helpers(辅助方法),包括内置和自定义的方法.
  2. 通过 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 中, 示例变量能在视图中可用.

原文地址:https://www.cnblogs.com/FBsharl/p/11406150.html