为什么在 Rails class 中同时使用 require 和 include?

Why use both require and include in Rails class?

我想我在这个 this 线程的帮助下理解了 requireinclude 之间的区别。

然后我从 github page of the bcrypt-ruby gem. 中无意中发现了这段代码,为什么他们同时使用这两种方法?那么首先要加载单个模型,然后再通过 include 所有函数加载?

require 'bcrypt'

 class User < ActiveRecord::Base
    # users.password_hash in the database is a :string
    include BCrypt
 .....

require 加载 class。

include 实际上将它放在 User class 中,例如,将模块的方法作为 User class 定义的一部分。

您提到的问题非常明确地说明了差异。

require 加载一个 ruby 文件,使 BCrypt 模块可用于您的 ruby 代码。它不一定必须与您包含模块的 class 在同一个文件中。

require 也可用于使该文件中定义的 ruby class 可用(例如,您在项目中定义的其他 classes ).由于它在 gem 中,bcrypt 在 ruby 路径中,如果它是您项目中的文件,您可能需要引用完整路径,或使用 require_relative.

include 获取 bCrypt 模块中的代码并将其包含给您的用户 class,为用户提供 BCrypt 模块中声明的方法和属性。