【问题标题】:How can I access UrlWriter url/path generators from a model's class method?如何从模型的类方法访问 UrlWriter url/路径生成器?
【发布时间】:2010-06-24 23:00:10
【问题描述】:

我想从模型的类方法生成 url。我以前通过简单地包含ActionController::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

【问题讨论】:

  • 我突然想到ActionController::UrlWriter 方法通常包含在一个类中,因此它们成为该类实例方法的一部分。所以试图让它们可用于类方法......可能会很麻烦。 (而且不可能)

标签: ruby-on-rails ruby actioncontroller


【解决方案1】:
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

ruby-1.9.1-p378 ?> User.admin_path

=> "/admin"

【讨论】:

    【解决方案2】:

    甜!

    一点重构..

    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
    

    【讨论】:

    • 伟大的重构,只需要“ModelURL::singleton”而不是::generator
    猜你喜欢
    • 2014-11-27
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2017-11-27
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多