Rails 3.1 - Как правильно перенаправить с помощью пользовательских маршрутов

У меня есть модель Страницы с полем 'customURL'. Я могу сделать страницу # шоу в '/:customurl'. но так как я определил показ страницы таким образом в маршрутах, мое действие создания теперь перенаправляет в случае успеха на неправильный маршрут. Что мне следует изменить, чтобы наиболее корректно исправить перенаправление, чтобы оно указывало на '/: customurl' при сохранении?

контроллер:

def create
  @page = Page.new(params[:page])

  respond_to do |format|
    if @page.save
      format.html { redirect_to page_url, notice: 'Page was successfully created.' }
      format.json { render json: @page, status: :created, location: @page }
    else
      format.html { render action: "new" }
      format.json { render json: @page.errors, status: :unprocessable_entity }
    end
  end
end

маршруты:

resources :pages
...
get "/:customURL" => "pages#show"

Спасибо!

1 ответ

Решение

В routes.rbВы можете добавить магические помощники.

get "/:customURL" => "pages#show", :as => :custom

Тогда в вашем контроллере

format.html { redirect_to custom_url(@page. customURL), notice: ... }

Теперь "/:customURL" должен быть последним в вашем routes.rb, маршруты жадные, первый, который будет соответствовать, получит его. Так что, если у вас есть что-то вроде "/bob" и у вас есть контроллер, слушающий "/bob", контроллер получит это раньше, чем контроллер страниц.

Другие вопросы по тегам