【问题标题】:RuntimeError default_url_options host and root_url (with subdomain)RuntimeError default_url_options host and root_url (with subdomain)
【发布时间】:2011-04-08 13:39:53
【问题描述】:

我的应用程序的每个用户都有一个存储在 db 中的自定义 url(通过子域)。

我的请求很简单,我想通过 json feed 发送“用户 url”,如下所示:

{user_name: "vincent", :user_url: "vincent.my_app.com"}

为此,我已经覆盖了用户模型的 as_json 函数:

def as_json(options={})
    {
        :user_name: self.name,
        :user_url: root_url(:subdomain => self.subdomain)
    }
end

我有这个附加模块(它很好用,不是实际问题):

module SubdomainHelper
def with_subdomain(subdomain)
    subdomain = (subdomain || "")
    subdomain += "." unless subdomain.empty?
    host = ActionMailer::Base.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

但是当我得到 json 提要时,我有这个错误:

RuntimeError (Missing host to link to! Please provide :host parameter or set default_url_options[:host]):

指向用户模型的“as_json”方法。

当然每个环境都在 dev.rb 中实现 default_url_options:

config.action_mailer.default_url_options = {:host => 'my_app:3000'}

我不明白为什么以及如何解决它。请帮帮我。

【问题讨论】:

    标签: ruby-on-rails-3 subdomain actionmailer urlhelper


    【解决方案1】:

    我遇到了类似的问题。不知何故,它似​​乎与 actionpack 的 url_helper 和我的字段名称有关。似乎是字段名称以 *_url 结尾的问题。不要完全理解为什么,但我有一个名为 login_url 的字段,我将其重命名为 login_uri(注意从 l 到 i 的变化),它解决了我的问题。

    【讨论】:

      【解决方案2】:

      要在您的模型中使用 url 帮助程序 root_path,我假设您正在混合使用 Rails.application.routes.url_helpers 或类似名称。这些助手总是构造引用default_url_options 的URL。 ActionController 从当前请求中找出这些默认选项。 config.action_mailer.default_url_options 仅适用于没有请求直觉默认值的邮件,不适用于模型。视图委托给控制器/邮件程序。每个混合这些助手的类都必须提供default_url_options,但通常重新定义它只是一个坏主意。提供来自控制器、邮件程序或视图的 URL。

      如果你真的需要,在你的模型中:delegate :default_url_options, to: ActionMailer::Base

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-11
        • 2011-05-06
        • 1970-01-01
        • 2015-09-01
        • 2017-11-02
        • 2021-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多