要求 'tire' gem 未在模型 class 中提及,但在 rails 应用程序中仍然可以使用它
require 'tire' gem not being mentioned in a model class but usage of it still works in rails app
我正在审查我继承的 rails 应用程序的代码,我不是 rails 方面的专家。在应用程序的 gem 文件中有:gem 'tire'
。很好,但我希望在模型或控制器中使用 require 'tire' 以便能够使用此 gem 提供的库。
根据特定 gem 的文档,它说它需要作为模型 class 中的 mixin 包含在内。
include Tire::Model::Search
include Tire::Model::Callbacks
或者文档中提到在您计划使用轮胎 gem 的模型 class 中使用 require 'tire'
。
但是在项目中,我没有在模型中看到这些 require/includes 中的任何一个。这些模型只是使用 api 而没有 requiring/including 像这样:
ret = Tire.index "icrd" do
import [icrdObj]
refresh
end
这是如何运作的?我应该在 rails 项目的什么地方查看以了解为什么不需要 require 或 include?是否正在进行某种自动加载?
当 gem 包含在 Gemfile
中时,将自动调用关联的 require ..
语句。
有关 rails 如何处理 gem 的解释,请参阅 http://www.justinweiss.com/blog/2014/10/13/how-does-rails-handle-gems/。
来自该博文:
So, Bundler will look in your Gemfile for gems belonging to each of
those groups, and call require on each of the gems it finds. If you
have a gem nokogiri, it’ll call require "nokogiri" for you. And that’s
why your gems usually just work in Rails, without any extra code on
your part.
Bundler 有很多不错的方法。 Bundler.setup
确保您可以轻松地在您的应用中要求 gem。
Bundler.require(:default, :production)
例如(它接受组名)需要 all gems 通过执行 gem 文件自动执行 require 'tire'
, require 'rails'
等等,给你。
您可以通过在 gem 文件中的 gem 行附近添加 require: false
来跳过某些 gem 的自动要求,例如
gem 'rails', require: false
检查 Bundler.require 文档(位于 groups
下)
我正在审查我继承的 rails 应用程序的代码,我不是 rails 方面的专家。在应用程序的 gem 文件中有:gem 'tire'
。很好,但我希望在模型或控制器中使用 require 'tire' 以便能够使用此 gem 提供的库。
根据特定 gem 的文档,它说它需要作为模型 class 中的 mixin 包含在内。
include Tire::Model::Search
include Tire::Model::Callbacks
或者文档中提到在您计划使用轮胎 gem 的模型 class 中使用 require 'tire'
。
但是在项目中,我没有在模型中看到这些 require/includes 中的任何一个。这些模型只是使用 api 而没有 requiring/including 像这样:
ret = Tire.index "icrd" do
import [icrdObj]
refresh
end
这是如何运作的?我应该在 rails 项目的什么地方查看以了解为什么不需要 require 或 include?是否正在进行某种自动加载?
当 gem 包含在 Gemfile
中时,将自动调用关联的 require ..
语句。
有关 rails 如何处理 gem 的解释,请参阅 http://www.justinweiss.com/blog/2014/10/13/how-does-rails-handle-gems/。
来自该博文:
So, Bundler will look in your Gemfile for gems belonging to each of those groups, and call require on each of the gems it finds. If you have a gem nokogiri, it’ll call require "nokogiri" for you. And that’s why your gems usually just work in Rails, without any extra code on your part.
Bundler 有很多不错的方法。 Bundler.setup
确保您可以轻松地在您的应用中要求 gem。
Bundler.require(:default, :production)
例如(它接受组名)需要 all gems 通过执行 gem 文件自动执行 require 'tire'
, require 'rails'
等等,给你。
您可以通过在 gem 文件中的 gem 行附近添加 require: false
来跳过某些 gem 的自动要求,例如
gem 'rails', require: false
检查 Bundler.require 文档(位于 groups
下)