私はRails 2.3.8を使用しています。新しい/作成、編集/更新のためにRailsがリダイレクトを作成
フォームでエラーが発生した後にレンダリングされる動作に問題があります。
だから私はposts
コントローラと定期的な関連アクション、index
、new
、create
、edit
、update
、およびshow
を持っています。ここで
はPostsController
のフォームとアクションは、次のとおりです。
<% form_for(@post, :html => {:multipart => true}) do |f| %>
<%= f.error_messages %>
# Form fields and stuff
<%= f.submit "Create New Post" %>
<% end %>
edit.html.erb
:
def new
@post = Post.new
# other setup
end
def create
if request.post?
@post= Post.new(params[:post])
# other setup for save
if @post.save
flash[:notice] = 'Post was successfully created.'
redirect_to campaign_path(@post, :redirect => "create")
else
render :action => 'new'
end
end
end
def edit
@post = Post.find(params[:id])
# other setup
end
def update
# setup for save
if @campaign.update_attributes(params[:post])
flash[:notice] = 'Your post was successfully updated.'
redirect_to :action=> "index"
else
render :action => "edit"
end
end
そしてここでは、ビュー
new.html.erb
のフォームがある
<% form_for(@post, :html => {:multipart => true}) do |f| %>
<%= f.error_messages %>
# Form fields and stuff
<%= f.submit "Update This Post" %>
<% end %>
私の問題はです:もし私がnew
ページにいて、何らかのエラー(例:フィールドを空のままにしておきます)、レンダリングされたビューは間違った場所に送信されます。だから私がnew
で始まり、何度もうまくいかなかった場合は、new
、次にcreate
、次にedit
、そしてupdate
というアクションで私を連れて行きます。だから、動作は次のとおりです。
はポストを作成して開始します。
処置:new
URI:/posts/new
レンダリング ビュー:失敗show
を提出しに行く:create
new
が提出は、に行きます
最初に失敗した送信後:
アクション:create
URI:/posts
が悪いですか?レンダリング
ビュー:index
(これはフォームがupdate
アクション、悪いに提出されることを意味)
失敗を提出しに行く::第二の失敗が提出した後edit
悪い
new
成功を提出しに行きます:
アクション:edit
悪い、私はここから01になるべきではありません!
URI:レンダリング/posts/[id]
ビュー:edit
悪い、私はnew
からここに来ることができないはずです!成功 が提出
は、に行く:アップデートを通じてindex
失敗提出行くまで:3回目以降の失敗した送信した後update
:
処置:update
悪い、私はからここに来ることができないようにする必要がありnew
!
URI:レンダリング/posts/[id]
ビュー:edit
悪い、私はnew
からここに来ることができないはずです!誰もが私が間違ってやっているものに私を指すことができれば、私は感謝しupdate
:成功
は、に行く投稿:失敗index
を提出しに行きます。追加情報が必要な場合は、尋ねてください。
ありがとうございます!
がない場合は、
else
なし特にそのrequest.post?
の必要は捕獲しないために@post = Post.new(params [:post]) '私はまた' update_attribute'を実行します。それを保存するために 'Post.new'に電話する必要はありませんか?明確にするために、どこかで明示的にidを指定することはしませんが、ある時点で自動的に作成されると思います。 –update_attributeを呼び出すと、投稿がそこに保存される可能性があります。最初のチェックは、update_attributeが成功しないことです。そうでない場合は、次のアクションで更新を実行していて、作成を実行していません。 –
あなたは絶対に正しいです。私は新しい投稿を作成すると、更新属性を削除し、paramsハッシュの変更を 'merge!'に変更しました。本当にありがとう! –