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.

Antworten:


76

Sie sollten die Methode darin definieren ApplicationController.


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

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

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

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!


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.