【问题标题】:Add method to a gem's helpers向 gem 的助手添加方法
【发布时间】:2014-11-20 06:44:38
【问题描述】:

我正在使用一个 gem,它在以下模块层次结构下添加了许多 View 助手:

module Ransack
  module Helpers
    module FormHelpers
      def search_form_for
      end
    end
  end
end

ActionController::Base.helper Ransack::Helpers::FormHelper

我想将自己的辅助方法添加到相同的模块层次结构中,并使其可用于所有视图。我该怎么做?

【问题讨论】:

  • 重新打开其中一个模块并添加您的方法?
  • 我应该在哪里重新打开它?我不确定 Rails 加载顺序的哪个位置可以使它工作,我目前的实验都失败了。

标签: ruby-on-rails ruby-on-rails-3.2 gem monkeypatching


【解决方案1】:

使用其他方法更改 gem 有什么意义?如果它是一个视图助手,只需在应用程序的app/helpers 目录中创建一个适当的文件,然后在其中添加您的自定义助手。

自定义助手将可用于所有视图。

【讨论】:

  • 虽然可行,但感觉有点错误。该方法肯定与 Ransack gem 相关联,而不是全局命名空间。事实上,它需要引用 `Ransack::Helpers` 对象,这意味着它们需要添加完整的命名空间路径。应该可以将方法添加到它所属的位置。也就是说,它确实有效,所以我暂时将其作为一种解决方法。
  • 污染一个不受你控制的命名空间(例如gem)通常不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 2015-02-10
  • 2013-01-21
  • 2015-11-24
  • 2011-12-08
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多