0

サイト内のすべての静的ページを担当し、routes.rbで次のように機能するstatic_controllerがあります。

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

私は他の情報の中でそれについて呼ばれる静的なページを持っています、連絡フォームがあります。私は現在、データベースへの連絡先情報の挿入を担当するcontacts_controllerを持っています。私のroutes.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

問題は、アバウトページにリダイレクトすると、フォームのerror_messagesが失われることです(フォームのerror_messagesは1つのリクエストにのみ存在し、そのリクエストはリダイレクト時に終了するため)。error_messagesを保持し、ユーザーをabout staticurlにリンクする方法を教えてください。セッション/フラッシュで十分でしょうか(もしそうなら、エラーメッセージを渡すためにどのコードを使用しますか)、それとも私はこのすべてを間違って行っていますか?

ありがとう!

4

1 に答える 1

2

リダイレクトではなくレンダリングする必要があると思います。Redirect はリクエストを終了し、別のアドレスに新しいリクエストを行うようにクライアントに指示します。それはあなたのエラーを失います。保存に失敗した場合は、表示されたエラーでアクションを再度レンダリングしてリクエストを完了します。

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
于 2010-04-04T00:43:26.737 に答える