Каков наилучший способ для маршрутизации статического контроллера в Rails? - PullRequest
0 голосов
/ 04 апреля 2010

У меня есть static_controller, который отвечает за все статические страницы сайта и работает следующим образом в rout.rb:

map.connect ':id', :controller => 'static', :action => 'show'

У меня есть статическая страница, которая, помимо другой информации, называется контактной формой. В настоящее время у меня есть contact_controller, который отвечает за вставку контактной информации в базу данных. В моем файле rout.rb у меня есть:

map.resources :contacts

Моя контактная форма (упрощенная) выглядит так:

<% form_for @contact do |f| %>
    <p class="errors"><%= f.error_messages %></p>  

    <p>
        <%= f.label :first_name %>
        <%= f.text_field :first_name %>
    </p>


    <p class="buttons"><%= f.submit %></p>
<% end %>

Который, в свою очередь, подчиняется действию создания моего contacts_controller. Мое действие создания выглядит так:

def create
    @contact = Contact.new(params[:contact])
    if @contact.save
      flash[:notice] = "Email delivered successfully."
    end
    redirect_to "about"
end

Проблема в том, что когда я перенаправляю обратно на свою страницу about, сообщения error_message для формы теряются (поскольку сообщения error_messages для формы существуют только для одного запроса, и этот запрос заканчивается после перенаправления). Как бы я сохранил error_messages и по-прежнему связывал пользователей со статическим url? Будет ли достаточно сеанса / флэш-памяти (если да, какой код я бы использовал для передачи сообщений об ошибках), или я все делаю неправильно?

Спасибо!

1 Ответ

2 голосов
/ 04 апреля 2010

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

def create
@contact = Contact.new(params[:contact])
if @contact.save
  flash[:notice] = "Email delivered successfully."
  redirect_to @contact #make a new request for the address of the new record or some other address if you want
else
  render :action => "new" #complete the request by rendering the new action with the @contact variable that was just created (including the @errors).
end
...