Создание маршрутов с дополнительным префиксом пути

Проблема решена:

в service.ts должно быть

const headers = new HttpHeaders (). Append ( ' Content-Disposition ', 'multipart / form-data');

вместо

const headers = new HttpHeaders (). append (' Content-Type ', 'multipart / form-data');

Также в контроллере .net , добавляя или удаляя [ 110] [FromForm (Name = "file")] в качестве префикса параметра не меняет поведение. Он прекрасно работает с ним или без него. Как указал Хьюго в комментариях, это соглашение основано, если имя параметра совпадает с именем в данных формы.

22
задан Codebeef 17 October 2008 в 22:07
поделиться

5 ответов

Хорошо, мне удалось разобраться в этой проблеме:

нет никакого способа не сделать это в направляющих по умолчанию (по крайней мере, еще). Вместо того, чтобы использовать пространства имен и значения по умолчанию, я должен был установить фильтр маршрутизации Sven Fuchs .

, Как только плагин установлен, я добавил следующий файл к своему каталогу lib:

require 'routing_filter/base'

module RoutingFilter
  class Locale < Base

    # remove the locale from the beginning of the path, pass the path
    # to the given block and set it to the resulting params hash
    def around_recognize(path, env, &block)
      locale = nil
      path.sub! %r(^/([a-zA-Z]{2})(?=/|$)) do locale = $1; '' end
      returning yield do |params|
        params[:locale] = locale || 'en'
      end
    end

    def around_generate(*args, &block)
      locale = args.extract_options!.delete(:locale) || 'en'
      returning yield do |result|
        if locale != 'en'
          result.sub!(%r(^(http.?://[^/]*)?(.*))){ "#{$1}/#{locale}#{$2}" }
        end 
      end
    end

  end
end

я добавил эту строку к routes.rb:

map.filter 'locale'

Это в основном заполняет прежде и после рычага, сгенерированного плагином, который обертывает маршрутизацию направляющих.

, Когда URL распознан, и прежде чем направляющие добираются, чтобы сделать что-либо с ним, around_recognize метод называют. Это извлечет двухбуквенный код, представляющий локаль, и передаст ее через в параметрических усилителях, принимая значение по умолчанию к 'en', если никакая локаль не будет определена.

Аналогично, когда URL будет сгенерирован, параметр локали будет продвинут в URL на левой стороне.

Это дает мне следующие URL и отображения:

/   => :locale => 'en'
/en => :locale => 'en'
/fr => :locale => 'fr'

Все существующие помощники URL работают как прежде с единственной разницей, являющейся, что, если локаль не определяется, это сохраняется:

home_path                  => /
home_path(:locale => 'en') => /
home_path(:locale => 'fr') => /fr
19
ответ дан 29 November 2019 в 05:32
поделиться

Можно определить значения по умолчанию в маршруте с помощью :defaults ключ. Попробуйте это:

map.connect ':lang/posts/:id', :controller => 'posts', :action => 'show',
                               :defaults => { :lang => 'en' }
2
ответ дан 29 November 2019 в 05:32
поделиться

Я предполагаю (сейчас нет времени на тестирование), что это может сработать:

map.connect ':language/posts/:id', :controller => 'posts', :action => 'show'
map.connect 'posts/:id', :controller => 'posts', :action => 'show'

Хорошо, попробовал - работает, по крайней мере на Rails 2.1.1. Так что это хорошо. Однако идея «по умолчанию» не работает, и это позор, потому что это СУХОЙ.

1
ответ дан 29 November 2019 в 05:32
поделиться

Мысль Вы могли когда-то использовать [ключ] => ноль для определения дополнительного параметра. Что-то как:

map.connect ':lang/posts/:id', :controller => 'posts', :action => 'show', :lang => nil
1
ответ дан 29 November 2019 в 05:32
поделиться

Я понимаю, что этот старый вопрос, но он может быть полезен.

  map.with_options(:path_prefix => ":locale") do |m|
    m.resources :posts
    m.resources :stories        
  end

И для определения локали нужно добавить перед фильтром в контроллер приложения, например,

before_filter :define_locale

def define_locale
  if params[:locale] == nil
    I18n.locale = 'en'
  else
    I18n.locale = params[:locale]
  end
end
2
ответ дан 29 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: