trasy URL nie powinny zasadniczo muszą być dostępne od modelu. Zwykle powinieneś mieć do nich dostęp tylko ze swojego kontrolera podczas obsługi żądania lub podczas renderowania widoku (jeśli np. Formatujesz URL linku).
Zamiast pytać obiektu modelu o ścieżkę główną, wystarczy wywołać root_path
z poziomu kontrolera lub widoku.
Edit
Jeśli jesteś po prostu zainteresowany powód dlaczego nie jesteś w stanie to metody modułu jako metody klasy w swojej klasie, nie spodziewałbym prosty include
do pracy, ponieważ, które uwzględnij metody modułu jako metody w twojej klasie.
extend
normalnie by działało, ale w tym przypadku nie wynika to z implementacji metody url_helpers
. Od actionpack/lib/action_dispatch/routing/route_set.rb źródła
def url_helpers
@url_helpers ||= begin
routes = self
helpers = Module.new do
...
included do
routes.install_helpers(self)
singleton_class.send(:redefine_method, :_routes) { routes }
end
Blok included
zawierające wezwanie routes.install_helpers(self)
oznacza, że trzeba będzie include
modułu w celu poznania metod instalowania (tak extend
jest obecnie).
Następujące powinny działać, jeśli wywołasz extend
w kontekście klasy. Wypróbuj to:
Class MyModel
class << self
include Rails.application.routes.url_helpers
end
end
Class.root_path
To jest złe podejście do MVC. Powinieneś dodać metody związane z trasami na poziomie kontrolera aplikacji lub poziomu pomocnika. –
Duplikat http://stackoverflow.com/questions/341143/can-rails-routing-helpers-i-e-mymodel-pathmodel-be-used-in-models –
jak to jest duplikat. dodają go jako metody instancji. Chcę dodać go jako metody klasy. i to są moje pytania: jak dodać metody instancji modułów jako metody klasowe – user566245