Переопределение маршрута ресурса к / (root) в Rails3: не меняется ли помощник пути? - PullRequest
9 голосов
/ 26 сентября 2010

Я довольно новичок в Rails3, я в основном создал леса subscribers, я хочу, чтобы мое приложение реагировало только на действия new и create.

Итак, в config/routes.rb я определил:

resources :subscribers, :only => [:new, :create]

Который работает таким образом

GET /subscribers => subscribers#new
POST /subscribers => subscribers#create

Теперь я хочу, чтобы мое приложение отображало ресурсы подписчиков на / (root) вместо /subscribers, поэтому я сделал следующее:

match '/' => "subscribers#new"
match '/' => "subscribers#create"
match '/' => "subscribers#thankyou"
resources :subscribers, :only => [:new, :create]

Что-то работает, но, вероятно, не СУЩЕСТВЕННАЯ вещь: вот мои проблемы:

  1. Когда вы возвращаетесь к форме после того, как проблема при создании браузера отображает URL /subscribers вместо /, форма создается с помощью вспомогательного метода form_for(@subscriber), поэтому вспомогательный path должен быть как-то не зависит от маршрута
  2. В идеале я даже не хочу, чтобы приложение отвечало на запрос /subscribers
  3. Я заметил странную ошибку: при публикации формы в отключенном состоянии (с /, а затем при обновлении соединения выполняется обновление (запрос браузера на повторную отправку => OK), приложение Rails падает (не хотя есть стек ошибок, как это было на производстве), почему это так?

Также я попытался настроить маршрут следующим образом:

resources :subscribers, :only => [:new, :create] do
  collection do
    post '/' => :create
    get '/' => :new
  end
end

Что, вероятно, является СУШКОЙ, но не решает ни одну из этих проблем.

Я уверен, что это довольно просто, пожалуйста, помогите!

Ответы [ 3 ]

19 голосов
/ 15 ноября 2010

Спасибо за ваши ответы, это помогло мне найти точное решение моего вопроса:

resources :subscribers, :only => [:new, :create], :path => '', :path_names => {:new => ''}

Протестировано и работает на Rails 3:)

3 голосов
/ 25 октября 2010

Вы могли бы сделать

resources :subscribers, :path => ''

и убедитесь, что GET / обслуживается вашим корневым шаблоном, например добавив это в SubscribeersController:

  def index
    render 'welcome/index'
  end

Я экспериментировал с использованием объявления match "/" для переопределения действия индекса ресурса и сопоставления его с другим контроллером, но очевидно, что объявление resources всегда полностью переопределяет объявленные вручную маршруты.

0 голосов
/ 28 сентября 2010

Для номера 2 в вашем списке, удалите эту строку и перепишите все методы _path или _url в вашем erb:

resources :subscribers, :only => [:new, :create]
...