Rails 4没有从我的HAML视图调用我的控制器的default_url_options方法

时间:2016-04-05 18:09:28

标签: ruby-on-rails ruby-on-rails-4

我想从我的HAML视图中更改所有link_to调用的主机和端口。我在我的控制器中实现了default_url_options,但它从未被调用过。

class WelcomeController < ApplicationController
  # ...
  def default_url_options
    { host: 'mysite.com:34567' }
  end
end

ApplicationControllerApplicationController < ActionController::Base

的位置

这应该有效吗?也许有人能指出我一个有效的例子吗?

我正在使用Rails 4.2.4

2 个答案:

答案 0 :(得分:0)

该方法不应该在ApplicationController范围内吗?

这样所有控制器都将继承并覆盖默认路由主机。

另请注意documentation

  

在给定的请求中,实际上并不为每个生成的URL调用该方法;出于性能原因,返回的哈希值被缓存,每个请求最多只有一次调用。

您还可以修改您的环境以从那里应用它,例如修改development.rb并添加:

Rails.application.routes.default_url_options[:host] = 'mysite.com:34567'

答案 1 :(得分:0)

好的 - 我无法让它按照我想要的方式工作,但我确实找到了一个合理的解决方案:

  1. 为我的控制器link_to_asset创建一个帮助器。使用root_url尊重我的控制器中default_url_options返回的内容。

    module ApplicationHelper
      def link_to_asset(asset)
        "#{root_url}#{asset.path}"
      end
    end
    
  2. 在我的视图中使用,就像这样

    %li.link= link_to asset.name, link_to_asset(asset)