Передача сообщений об ошибках от одного контроллера к другому - PullRequest
0 голосов
/ 05 января 2011

У меня есть контактная форма на моем сайте. Работает нормально, вот код:

class ContactsController < ApplicationController
  def new
    @contact = Contact.new(:id => 1)
  end

  def create
    @contact = Contact.new(params[:contact])
    if @contact.save
      redirect_to('/', :notice => "Message sent ....")
    else
      flash.now[:error] = "Oops, something went wrong. Please try again"
      render 'new'
    end
  end
end

#contact
  = simple_form_for @contact, :url=>{:controller=>:contacts, :action=>:create}, :html=>{:method=>:post} do |f|
    = render 'shared/error_messages', :target => @contact
    = f.input  :name
    = f.input  :email
    = f.input  :subject
    = f.input  :body, :as => :text, :input_html => { :rows => 5 }
    = f.submit "Send"

Я решил, что хочу разместить контактную форму на своей домашней странице по адресу pages/index.html.haml

Таким образом, я приклеил форму частично, добавил ссылку на нее внизу моей домашней страницы и добавил переменную экземпляра в действие index в контроллере страниц. Если я правильно заполняю форму, письмо отправляется, и все отлично.

Но если отправка формы завершается неудачно, действие: new из contacts_controller отображается, когда я бы предпочел действие: index для pages_controller. Я знаю, что могу перенаправить на это действие, используя redirect_to "/", но я не получаю сообщения об ошибках в форме, когда я делаю это таким образом.

Как я могу передать управление из contacts_controller в pages_controller и включить сообщения об ошибках при неудачной отправке формы?

1 Ответ

1 голос
/ 05 января 2011

Не уверен, как вы будете разветвлять свой код в случае сбоя при создании в действии create на нужную страницу, но если вы хотите перенаправить, вам не нужен flash.now.

В основном

if @contact.save
  redirect_to('/', :notice => "Message sent ....")
else
  if (should new page be shown check)
    flash.now[:error] = "Oops, something went wrong. Please try again"
    render 'new'
  else
    flash[:error] = "Oops ... "
    redirect_to somelocation_path
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...