2014-10-20 3 views
2

Так что я пытаюсь делегировать метод format_text методу уровня класса, поэтому у меня не было бы двух методов с тем же именем. Есть ли хороший образец или способ сделать это? Причина этого в том, что я могу позвонить format_text как в представлениях, так и в презентациях. Я понимаю, что, вероятно, не очень хорошая практика использовать ApplicationHelper вне представлений.Передача метода методу класса с тем же именем в 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 

ответ

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")