Rails: рендеринг действий с определенным путем - PullRequest
1 голос
/ 09 декабря 2010

В моем приложении Rails3 я добавляю конкретное совпадение для edit моей Post модели как:

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

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

.

Как мне перезаписать это, чтобы отобразить действие edit с установкой пути URL-адреса как /edit вместо posts/1.

1 Ответ

0 голосов
/ 09 декабря 2010

Вы действительно видите 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-адрес по умолчанию?Это необходимо?

...