2010-06-24 2 views
2

모델의 클래스 메소드에서 URL을 생성하려고합니다. 이전에 ActionController::UrlWriter을 포함하여 인스턴스 메소드에서이 작업을 수행했습니다.이 인스턴스 정의 범위와 클래스 정의 범위를 포함 시키려고했지만 아무 소용이 없었습니다.모델의 클래스 메서드에서 UrlWriter URL/경로 생성기에 액세스하려면 어떻게해야합니까?

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 –

답변

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 :: 생성자가 아닌 : ": 싱글 톤" – jamiew

관련 문제