Куди покласти допоміжні методи Ruby для контролерів Rails?


75

У мене є деякі методи Ruby, які потрібні певним (або всім) контролерам. Я спробував помістити їх /app/helpers/application_helper.rb. Я використовував це для методів, які будуть використовуватися у поданнях. Але контролери не бачать цих методів. Чи є інше місце, куди я повинен їх поставити, чи мені потрібно отримати доступ до цих допоміжних методів інакше?

Використовуючи новітні стабільні рейки.

Відповіді:


76

Ви повинні визначити метод всередині ApplicationController.


27
Крім того, він повинен буде додати helper_method :my_helper_methodв , ApplicationControllerщоб зробити їх доступними для уявлень.
Девід

2
не з часом це призведе до контролера жиру?
bgcode

1
також @David, який порушує MVC
bgcode

67

Що стосується Rails 4 і далі, то проблеми - це шлях. Була пристойна стаття, яку все ще можна переглянути через Wayback Machine.

По суті, якщо ви заглянете в папку контролерів, ви побачите підпапку з проблемами. Створіть там модуль уздовж цих рядків

module EventsHelper
  def do_something
  end
end

Потім у контролер просто включіть його

class BadgeController < ApplicationController
  include EventsHelper

  ...
end

2
Я вважаю це найкращим рішенням, коли вам не потрібні допоміжні методи, включені у всі ваші контролери. Це рішення також стосується моделей.
Денніс

Приємно. Дякую :)
tonyedwardspz

Чи знаєте ви, чи потрібно нам використовувати extend ActiveSupport::Concernз проблемами контролера?
Марклар

Не потрібно розширювати ActiveSupport :: Concern всередині каталогу контролера / стосується. Вам просто потрібно визначити модулі над каталогом, і ви можете просто включити, як згадано вище (для рейок 4.2 і рейок 5).
Равіндра М

мабуть, найкраща відповідь
Антон Семениченко

29

вам слід визначити методи всередині контролера програми, якщо у вас небагато методів, ви можете зробити наступне

class ApplicationController < ActionController::Base    
  helper_method :first_method
  helper_method :second_method

  def first_method
    ... #your code
  end

  def second_method
    ... #your code
  end
end

Ви також можете включити допоміжні файли наступним чином

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
end

чи є спосіб призначити всі helper_methods в одному рядку?
Харша М.В.

@HarshaMV Я ​​думаю, ти можеш просто продовжувати, як helper_method :first_method, :second_method.
Franklin Yu

19

Ви можете викликати будь-які допоміжні методи з контролера, використовуючи view_context, наприклад,

view_context.my_helper_method

8

Відповідь Райана Бігга хороша.

Іншим можливим рішенням є додавання помічників до вашого контролера:

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
 end

З найкращими побажаннями!


0

Включення помічників у контролер призведе до викриття методів допоміжних засобів як дій!

# With new rails (>= 5) 

helpers.my_helper_method


# For console

helper.my_helper_method
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.