質問

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が迷子ということです。 どのように私はerror_messagesを維持し、まだに関する静的URLに戻ってユーザーをリンクに行きますか? セッション/フラッシュが十分であろうか、私はこの全体のことを間違っについてんだ?(、どのようなコード私はエラーメッセージを渡すために使用するのであれば)

ありがとうございます。

役に立ちましたか?

解決

私は何が起こっている可能性がありますが、あなたがリダイレクトではなく、レンダリングする必要があると思います。 リダイレクトは、要求を終了し、別のアドレスに新たな要求をするために、クライアントに指示します。それはあなたのエラーを失うことになります。 あなたの試み保存が示すエラーで再びアクションをレンダリングすることで、要求を完了するために、あなたの希望を失敗した場合。

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top