Wo werden Ruby-Hilfsmethoden für Rails-Controller abgelegt?

75

Ich habe einige Ruby-Methoden, die bestimmte (oder alle) Controller benötigen. Ich habe versucht, sie einzulegen /app/helpers/application_helper.rb. Ich habe das für Methoden verwendet, die in Ansichten verwendet werden sollen. Controller sehen diese Methoden jedoch nicht. Gibt es einen anderen Ort, an dem ich sie platzieren sollte, oder muss ich anders auf diese Hilfsmethoden zugreifen?

Verwendung der neuesten stabilen Schienen.

beim.
quelle

Antworten:

76

Sie sollten die Methode darin definieren ApplicationController.

Ryan Bigg
quelle
27
Er muss auch hinzufügen , helper_method :my_helper_methodin ApplicationControllersie zu den Ansichten zur Verfügung zu stellen.
David
2
Wird dies nicht im Laufe der Zeit zu einem Fettregler führen?
BG-Code
1
auch @David, das MVC verletzt
bgcode
66

Ab Rails 4 sind Bedenken der richtige Weg. Es gab einen anständigen Artikel, der immer noch über die Wayback-Maschine eingesehen werden kann .

Wenn Sie in Ihren Controller-Ordner schauen, sollten Sie im Wesentlichen einen betroffenen Unterordner sehen. Erstellen Sie dort ein Modul in dieser Richtung

module EventsHelper
  def do_something
  end
end

Dann in den Controller einfach einbinden

class BadgeController < ApplicationController
  include EventsHelper

  ...
end
John Cleary
quelle
2
Ich finde das die schönste Lösung, wenn Sie nicht die Hilfsmethoden benötigen, die in all Ihren Controllern enthalten sind. Diese Lösung gilt auch für Modelle.
Dennis
Nett. Vielen Dank :)
Tonyedwardspz
Wissen Sie, ob wir extend ActiveSupport::Concernmit Controller-Bedenken arbeiten müssen?
Marklar
Es ist nicht erforderlich, ActiveSupport :: Concern im Controller / Concern-Verzeichnis zu erweitern. Sie müssen nur Module über dem Verzeichnis definieren und können einfach wie oben erwähnt einschließen (für Schienen 4.2 und Schienen 5).
Ravindra M
wahrscheinlich die beste Antwort
Anton Semenichenko
29

Sie sollten Methoden in Application Controller definieren. Wenn Sie nur wenige Methoden haben, können Sie wie folgt vorgehen

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

Sie können auch Hilfedateien wie folgt einfügen

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
end
Muhamamd Awais
quelle
Gibt es eine Möglichkeit, alle helper_methods in einer Zeile zuzuweisen?
Harsha MV
@ HarshaMV Ich denke du kannst einfach so weitermachen helper_method :first_method, :second_method.
Franklin Yu
19

Sie können beliebige Hilfsmethoden von einem Controller aus aufrufen, indem Sie view_contextz

view_context.my_helper_method
David
quelle
8

Ryan Bigg Antwort ist gut.

Eine andere mögliche Lösung besteht darin, Ihrem Controller Helfer hinzuzufügen:

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
 end

Freundliche Grüße!

Hyperrjas
quelle
0

Wenn Sie Helfer in den Controller aufnehmen, werden die Hilfsmethoden als Aktionen angezeigt!

# With new rails (>= 5) 

helpers.my_helper_method


# For console

helper.my_helper_method
Aparichith
quelle