在一个rails 3.2 app中,我这样做。
def url_options
{
:p1 => value1,
:p2 => value2
}.merge(super)
end
工作正常。除了Asset管道。 我需要将这些参数附加到所有应用网址,包括css,js,images。
在单独的rails 3.2 app中。我忽略了一个奇怪的原因。 相同的url_options不起作用。不仅是资产,而且根本不起作用。 我不得不做以下事情。
Rails.application.routes.default_url_options[:p1] = value1
也不适用于资产。 我很困惑。谁都知道解决方案?
感谢
答案 0 :(得分:0)
module Sprockets
module Helpers
module RailsHelper
def asset_path_with_url_options(source, options = {})
uri = Addressable::URI.parse(asset_path_without_url_options(source, options))
default_url_options = url_options.dup.delete_if { |k,v|
[:host, :port, :protocol, :_path_segments, :script_name].include?(k)
}
uri.query_values = default_url_options.merge(uri.query_values || {})
uri.to_s
end
alias_method_chain :asset_path, :url_options
alias_method :path_to_asset, :asset_path_with_url_options # aliased to avoid conflicts with an asset_path named route
end
end
end
class ApplicationController < ActionController::Base
protect_from_forgery
# anything using link_to, url_for, etc. uses this automatically.
def url_options
{
:k1 => v1,
:k2 => v2
}.merge(super)
end
end