如何在 rails 控制台中存储 "macros"?

How to store "macros" in rails console?

我有一个使用公寓 gem 的多租户 rails 应用程序。当我使用 rails 控制台时,我不断调用 Apartment::Tenant.switch 在公寓之间导航。我想在某个地方创建一个配置文件,在那里我可以将这个调用缩写为更短的类型。我将如何着手这样做,以便当我使用 rails console 启动控制台时可以使用这个较短的调用?我在想象

swtich = Apartment::Tenant.switch

然后每当我调用 switch 时它就会调用原始函数。

是一种更好的方法,我不推荐这样做。将其放入初始化程序或 application.rb 或类似的。

module Kernel
  def switch
    Apartment::Tenant.switch
  end
end

将允许您在控制台中简单地调用 switch。不过,您可能会破坏其他一些东西,您应该采取措施确保只能通过控制台访问它。

嗯。实际上不是宏,但我们 dynamic_method 定义正确。

所以您可以在 rails 控制台中执行此操作:

define_method :bar do
  Apartment::Tenant.switch
end

然后您可以调用 bar 方法作为您方法的简称。

为了将它添加到 initializers 我已经在初始化文件夹中创建了一个文件说 bar.rb

那我做到了,如果不理想的话:

class Object
    def bar
        Apartment::Tenant.switch
    end
end

重启控制台并调用 bar

我不太喜欢全局变量,但您可以将它放在 initalizers 文件中:

$switch = (Class.new do
  def [](tenant, &block)
    Apartment::Tenant.switch(tenant, &block)
  end
end).new

然后像这样使用它:

$switch['tenant_name'] do
  ....
end