Override rails helpers with access to original Override rails helpers with access to original ruby ruby

Override rails helpers with access to original


There's a better way than any of your listed options. Just use super:

module AwesomeHelper  def stylesheet_link_tag(*sources)    if @be_awesome      awesome_stylesheet_link_tag *sources    else      super    end  endend

Overriding stylesheet_link_tag in AwesomeHelper will ensure that, when stylesheet_link_tag gets invoked, Ruby will encounter it in the method lookup path before it hits ActionView::Helpers::AssetTagHelper. If @be_awesome is true, you get to take charge and stop things right there, and if not, the call to super without parentheses will transparently pass through all the arguments up to the Rails implementation. This way you don't have to worry about the Rails core team moving things around on you!


I don't use this gem, so I'll answer you in a more generic way.

Let's say you want to log calls to link_to helper (yeah, contrived example, but shows the idea). Looking in API gives you understanding that link_to located inside the ActionView::Helpers::UrlHelper module. So, you create some file in your, say, config/initializers directory with the following contents:

# like in config/initializers/link_to_log.rbmodule ActionView::Helpers::UrlHelper    def link_to_with_log(*args, &block)        logger.info '**** LINK_TO CALL ***'        link_to_without_log(*args, &block) # calling the original helper    end    alias_method_chain :link_to, :logend

The core of this functionality -- alias_method_chain (clickable). Use it AFTER defining the method xxx_with_feature.


Try using alias_method:

module AwesomeHelper  alias_method :original_stylesheet_link_tag, :stylesheet_link_tag  def stylesheet_link_tag(*sources)    if @be_awesome      awesome_stylesheet_link_tag *sources    else      original_stylesheet_link_tag *sources    end  endend