gpt4 book ai didi

ruby-on-rails - Rails - Presenter 中的 Helper Singleton 和 Rails Route Helpers

转载 作者:行者123 更新时间:2023-12-02 11:39:20 25 4
gpt4 key购买 nike

我似乎无法弄清楚为什么在尝试在 Presenter 类中使用路由助手时会收到 500 错误

在下面有一个 Presenter 类/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

任何帮助将不胜感激,因为我很困惑:)

最佳答案

好吧,我明白了。

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

关于ruby-on-rails - Rails - Presenter 中的 Helper Singleton 和 Rails Route Helpers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com