2010-06-24 1 views
2

Я хочу генерировать URL-адреса из метода класса модели. Я сделал это раньше из метода экземпляра, просто включив ActionController::UrlWriter. Я попытался включить это в область определения экземпляра, а также область определения класса, но безрезультатно.Как я могу получить доступ к генераторам url/path UrlWriter из метода класса модели?

class Foo < ActiveRecord::Base 
    # only works for instance methods 
    # include ActionController::UrlWriter 

    class << self 
    # results in this error: undefined method `default_url_options' for Class:Class 
    # include ActionController::UrlWriter 
    def my_method 
     return user_sprockets_url(:thingy => 'blue') 
    end 
    end  
end 
+0

это происходит со мной, что 'методы ActionController :: UrlWriter', как правило, включены в классе, так что они становятся частью методы экземпляра этого класса. поэтому попытка сделать их доступными для методов класса ... может быть проблемой. (и невозможно) –

+0

http://slaive-prog.tumblr.com/post/7618787555/using-routes-in-your-model-in-rails-3-0-x – 2011-12-18 21:52:31

ответ

3
class ModelURL 
    include ActionController::UrlWriter 
end 

class User 
    @url_generator = ModelURL.new 
    class << self 
    def admin_path 
     @url_generator.send :admin_path 
    end 
    end 
end 

рубин-1.9.1-P378?> User.admin_path

=> "/admin" 
1

Сладкий!

немного рефакторинга ..

class ModelURL 
    include ActionController::UrlWriter 
    @@singleton = ModelURL.new 
    class << self 
    def singleton 
     @@singleton 
    end 
    end 
end 

использование ...

ModelURL::singleton.send :user_sprockets_url, :thingy => 'blue', :host => DOMAIN 
+0

Отличный рефакторинг, просто должен быть «ModelURL :: singleton ", а не :: генератор – jamiew