2012-04-29 36 views
2

我似乎無法找出試圖利用路由助手在我的演示類導軌 - 辛格爾頓助手和Rails路線助手在演示

有下演示類時,爲什麼我得到一個500錯誤 /apps/presenters/base_presenter.rb /apps/presenters/object_presenter.rb

class BasePresenter 

    def self.as_collection(collection) 
    collection.collect{|object| self.new(object)} 
    end 

    def help 
    Helper.instance 
    end 

    class Helper 
    include Singleton 
    include Rails.application.routes.url_helpers 
    include ActionView::Helpers::TextHelper 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::UrlHelper 
    include ApplicationHelper 
    include UrlHelper 
    end 

end 

所以在我的對象主持人我做的as_json以下。每件事情都有效,直到我加入這個網址。對於爲什麼它不會訪問Rails路線感到懊惱。

class ObjectPresenter < BasePresenter 


    def initialize(object) 
    @object = object 
    end 

    def as_json(*args) 
    { 
     :url => blah_blah_url(@object, :subdomain => "www") 
    } 
    end 

end 

任何幫助,將不勝感激,因爲我難倒了:)

+0

我也注意到,包括(包括::的ActionView ::助手和UrlHelper包括導軌。 application.routes.url_helpers一起似乎會導致問題 – bokor

回答

4

確定我想通了。

class Presenter 
    include Rails.application.routes.url_helpers 

    def self.as_collection(collection) 
    collection.collect{|object| self.new(object)} 
    end 

    def help 
    Helper.instance 
    end 

    class Helper 
    include Singleton 
    include ActionView::Helpers::TextHelper 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::UrlHelper 
    include ApplicationHelper 
    include UrlHelper 
    end 

end 

然後在我的環境/ development.rb

Rails.application.routes.default_url_options = { :host => "lvh.me:3000" } # Fixes issue with Presenters not allowing Routes and Url Helper 
    config.action_mailer.default_url_options = { :host => "lvh.me:3000" } 

和我UrlHelper

module UrlHelper 

    def with_subdomain(subdomain) 
    subdomain = (subdomain || "") 
    subdomain += "." unless subdomain.empty? 
    host = Rails.application.routes.default_url_options[:host] 
    [subdomain, host].join 
    end 

    def url_for(options = nil) 
    if options.kind_of?(Hash) && options.has_key?(:subdomain) 
     options[:host] = with_subdomain(options.delete(:subdomain)) 
    end 
    super 
    end 

end