Вспомогательные методы для использования в контроллерах и представлениях в Rails

Я понимаю, что могу поместить вспомогательный метод в класс Helper внутри папки helper в Rails. Затем этот метод можно использовать в любом представлении. И я понимаю, что могу поместить методы в класс ApplicationController, и этот метод можно использовать в любом контроллере.

Где правильно разместить метод, который часто используется как в контроллерах, так и в представлениях?




Ответы (3)


Вы можете поместить его в контроллер и вызвать:

helper_method :my_method

от контроллера.

person Marek Lipka    schedule 12.09.2013


Я помещаю помощников, подобных тем, которые вы описываете, в модуль в моем каталоге lib/. Учитывая некоторое MyApp приложение, это будет идти в app/lib/my_app/helpers.rb и выглядеть как

module MyApp
  module Helpers
    extend self

    def some_method
      # ...
    end 

  end
end

Затем вы должны потребовать этот модуль. Создайте новый инициализатор в config/initializers/my_app.rb, который выглядит как

require 'my_app'

и убедитесь, что config.autoload_paths содержит ваш каталог lib/ в config/application.rb.

config.autoload_paths += Dir["#{config.root}/lib",
                             # other paths here...
                            ]

Наконец, включите модуль везде, где вы хотите его использовать. Где.

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base

  include MyApp::Helpers

app/helpers/application_helper.rb

module ApplicationHelper
  include MyApp::Helpers

Я думаю, что это более чистый и более проверяемый подход к управлению повторно используемыми помощниками в вашем приложении.

person deefour    schedule 13.09.2013