- Rails routing - how to add scope param to url_for helper?
- = link_to "Add new bio", [:new, :admin, :bio]
- namespace :admin do
- scope "/:bio_type", :defaults => {:bio_type => "company"} do
- resources :bios
- end
- end
- = link_to "Add new bio", [:new, :admin, :bio, { bio_type: params[:bio_type] }]
- def url_for(options = {})
- options ||= {}
- case options
- when String
- options
- when Hash
- options = options.symbolize_keys.reverse_merge!(:only_path => options[:host].nil?)
- super
- when :back
- controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
- else
- polymorphic_path(options)
- end
- end
- def polymorphic_path(record_or_hash_or_array, options = {})
- polymorphic_url(record_or_hash_or_array, options.merge(:routing_type => :path))
- end
- def polymorphic_url(record_or_hash_or_array, options = {})
- if record_or_hash_or_array.kind_of?(Array)
- record_or_hash_or_array = record_or_hash_or_array.compact
- if record_or_hash_or_array.first.is_a?(ActionDispatch::Routing::RoutesProxy)
- proxy = record_or_hash_or_array.shift
- end
- record_or_hash_or_array = record_or_hash_or_array[0] if record_or_hash_or_array.size == 1
- end
- record = extract_record(record_or_hash_or_array)
- record = convert_to_model(record)
- args = Array === record_or_hash_or_array ?
- record_or_hash_or_array.dup :
- [ record_or_hash_or_array ]
- inflection = if options[:action] && options[:action].to_s == "new"
- args.pop
- :singular
- elsif (record.respond_to?(:persisted?) && !record.persisted?)
- args.pop
- :plural
- elsif record.is_a?(Class)
- args.pop
- :plural
- else
- :singular
- end
- args.delete_if {|arg| arg.is_a?(Symbol) || arg.is_a?(String)}
- named_route = build_named_route_call(record_or_hash_or_array, inflection, options)
- url_options = options.except(:action, :routing_type)
- unless url_options.empty?
- args.last.kind_of?(Hash) ? args.last.merge!(url_options) : args << url_options
- end
- args.collect! { |a| convert_to_model(a) }
- (proxy || self).send(named_route, *args)
- end
- polymorphic_path([:new, :admin, :bio], bio_type: params[:bio_type])