2012-04-17 1 views
10

I Methode in ApplicationWie Methoden in Application in Modellen definiert nennen

class ApplicationController < ActionController::Base 
    helper_method :get_active_gateway 
    def get_active_gateway(cart) 
    cart.account.gateways 
    end 
end 

definiert haben, wenn ich diese Methode nenne in Modell

class Order < ActiveRecord::Base 
    def transfer 
    active= get_active_gateway(self.cart) 
    end 
end 

Es wirft Fehler undefined local variable get_active_gateway. So

Ich schrieb

class Order < ActiveRecord::Base 
    def transfer 
    active= ApplicationContoller.helpers.get_active_gateway(self.cart) 
    end 
end 

Dann wurde sie werfen error undefined method nil for Nilclass.

Ich arbeite in Rails 3.2.0.

+2

Wie die beiden Antworten sagten, sollten Sie keine Controller-Methoden von Ihren Modellen aufrufen. Es wird nicht empfohlen. In den Model View Controller (MVC) einlesen. Um die Dinge unabhängig zu halten. Grundsätzlich spricht Model mit dem Speicher, der Controller spricht mit dem Modell (und nicht umgekehrt) und spricht mit dem Controller. –

+0

Aufgrund des Rails-Designs und des Beseitigens der Möglichkeit, ApplicationController.helpers (jetzt) ​​aufzurufen, müssen Sie sich im Modell mit einem Dup-Code-def wiederholen. Stelle sicher, dass du an beiden Stellen einen Kommentar hinzufügst. Wenn du es an einer Stelle änderst, erinnerst du dich daran, es in der anderen zu ändern. – JosephK

Antwort

6

Warum würden Sie so etwas brauchen? Das Modell sollte nichts über seine Controller wissen. Vielleicht ist in diesem Fall eine Neugestaltung Ihres Systems sinnvoller.

Hier ist ein Link zu ähnlichen thread.

5

Als Design-Wahl ist es nicht empfehlenswert, Controller-Helfer von Ihren Modellen zu rufen.

Sie können einfach die erforderlichen Details als Argumente an Ihre Modellmethoden übergeben.

 

def transfer(active_gateway) 
    active = active_gateway 
end