Reputation: 1849
I can't seem to figure out why I'm getting a 500 Error when trying to utilize a route helper in my Presenter class
Have a Presenter class under /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
so in my object presenter I do the following for an as_json. Every thing works until I add this url. Boggled as to why it won't access the Rails routes.
class ObjectPresenter < BasePresenter
def initialize( object )
@object = object
end
def as_json(*args)
{
:url => blah_blah_url(@object, :subdomain => "www")
}
end
end
any help would be much appreciated because I'm stumped :)
Upvotes: 2
Views: 3903
Reputation: 1849
ok I figured it out.
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
then in my environment/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" }
and my 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
Upvotes: 6