Что визуализировать при ошибке в контроллере Rails - PullRequest
2 голосов
/ 19 мая 2011

В моем приложении rails у меня есть частичное представление с формой заявки на нем. Форма включена на нескольких страницах моего приложения. Форма в частичных записях RidesController для сохранения с помощью метода create, подобного этому:

RidesController.rb

def create
  @ride = current_user.rides.build(params[:ride])
  if @ride.save
    flash[:success] = "Ride created!"
    redirect_to root_path
  else
    @rides = current_user.rides.paginate(:page => params[:page])
    render 'pages/home'   # <---- WHAT GOES HERE?
  end
end

Я прокомментировал строку, где находится мой вопрос. Когда у нас есть ошибка, мне нужно представить то же представление, что и пользователь в данный момент. Но поскольку этот контроллер вызывается из частичного, а не из полного представления, я не знаю, как определить, из какого контекста он исходит.

Прямо сейчас, если есть ошибка на / rides / new, пользователь в итоге перенаправляется на домашнюю страницу, которая также имеет форму.

1 Ответ

0 голосов
/ 19 мая 2011

Один из способов сделать это - передать путь к шаблону вместе с формой.

Добавьте это к каждому основному виду, включающему частичную форму (например, pages / home, rides / new и т. Д.):

<% @current_page_template = __FILE__ %>

В вашей форме частично:

<%= form_for ... do |f| %>
  <%= hidden_field_tag 'current_page_template',
      @current_page_template.sub(File.join(Rails.root, 'app', 'views'), '') %>

В вашем контроллере:

def create
  ...
  if @ride.save
    ...
  else
    ...
    render params[:current_page_template]
  end
end
...