将方法委派给ApplicationHelper中具有相同名称的类方法

时间:2014-10-20 17:54:03

标签: ruby-on-rails ruby delegates

所以我要做的是将format_text方法委托给类级方法,这样我就不会有两个同名的方法。有这么好的模式或方式吗?这样做的原因是我可以在视图和演示者中调用format_text。我意识到在视图之外使用ApplicationHelper可能不是一个好习惯。

application_helper.rb

module ApplicationHelper

  # would like to do something like this:
  # delegate :format_text, to: self.format_text

  # all this method does is call self.format_text
  def format_text(text)
    # calls the class level method
    format_text(text)
  end

  # need the self. in front to use outside of view
  def self.format_text(text)
    # do something to the text and return a string
  end
end

视图使用帮助程序:

some_view.html.haml

%label= format_text('something needs formatting')

但在某些情况下,格式化需要在演示者级别下降。在这种情况下,要使用format_text方法,必须将其称为ApplicationHelper.format_text

some_presenter.rb

def header_of_some_data
  "#{@name} blah #{ApplicationHelper.format_text('some text')}"
end

1 个答案:

答案 0 :(得分:0)

您可以使用module_function

module ApplicationHelper
  def format_text(text)
    # do something to the text and return a string
  end
  module_function :format_text
end

ApplicationHelper.format_text("text")