map.resources :users
というリソースへのルートを定義している場合、
polymorphic_url(:users) # => "/users"
という具合になります。
そこで、追加のパラメータをあたえると
polymorphic_url(:users, :foo => 1) # => "/users?foo=1"
となることを期待する訳なんですけど、 Rails 2.1.1 ではそうはならなくて、URLパラメータが付かない一つ前の例と同じパスが返ってくる。
#880 URL options for polymorphic_url - Ruby on Rails - rails
edge では修正されてますけど、リリースするまでは、以下のような汚いパッチでごまかします。
if Rails::VERSION::STRING == "2.1.1"
# polymorphic_url should accept extra parameter options
# polymorphic_path(:projects, :foo => 1) # should be => /projects?foo=1
# This portion of code fixes this issue in a quick and dirty way.
ActionController::PolymorphicRoutes.module_eval do
def polymorphic_url_with_params(record_or_hash_or_array, options = {})
url = polymorphic_url_without_params(record_or_hash_or_array, options)
url_options = options.except(:action, :routing_type, :format)
unless url_options.blank?
url += "?" + url_options.to_param
end
url
end
alias_method_chain :polymorphic_url, :params
%w(edit new formatted).each do |action|
module_eval <<-EOT, __FILE__, __LINE__
def #{action}_polymorphic_url(record_or_hash, options = {})
polymorphic_url(record_or_hash, options.merge(:action => "#{action}"))
end
def #{action}_polymorphic_path(record_or_hash, options = {})
polymorphic_url(record_or_hash, options.merge(:action => "#{action}", :routing_type => :path))
end
EOT
end
end
end
No comments:
Post a Comment