2010-12-09 3 views
1

В моем приложении Rails3 добавить конкретный матч для edit моей Post модели, как:Rails: Рендер действия с определенным путем

match '/edit' => 'posts#edit', :as => 'post_edit' 

Итак, я перезаписать путь по умолчанию edit действия. - Теперь, если в действии update произойдут какие-либо ошибки, он отобразит действие edit с настройкой пути URL по умолчанию: edit путь /posts/1.

Как я могу переписать это для визуализации действия edit с настройкой URL-адреса как /edit вместо posts/1.

ответ

0

Фактически вы видите URL-адрес для «обновления», путь по умолчанию для редактирования будет /posts/1/edit. Я не думаю, что вы сможете изменить отображение URL с помощью render :action. Альтернативным, хотя и немного неаккуратным, было бы перенаправление и сохранение объекта @post в сеансе или флэш-памяти. Если вы не сохраните объект @post, вы потеряете сообщения об ошибках из обновления.

if @post.update_attributes(params[:post]) 
    #business as usual 
else 
    session[:post] = @post 
    redirect_to post_edit(@post) 
end 

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

Из-за любопытства, почему вы хотите изменить URL-адрес по умолчанию? Это необходимо?

+1

На самом деле, url будет `/ posts/1/edit` – nathanvda 2010-12-09 20:31:40

Смежные вопросы