我正在使用Rails 2.3.8
我遇到了在表单中出现错误后呈现的操作的问题。
所以我有一个posts
控制器和常规相关操作,index
,new
,create
,edit
,update
和show
。
以下是PostsController
中表单的操作:
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 "Create New Post" %>
<% end %>
edit.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
呈现的视图:new
成功提交到:show
不成功的提交请访问:create
首次提交失败后:
行动:create
URI:/posts
不好?
呈现的视图:new
成功提交到:index
(表示表单正在提交update
操作,错误)
不成功的提交将转至:edit
错误
第二次提交失败后:
操作:edit
错误,我无法从new
到达此处!
URI:/posts/[id]
已呈现的视图:edit
错误,我无法从new
到达此处!
成功提交到:index
直到更新
不成功的提交请访问:update
在第三次以及随后的不成功提交之后:
操作:update
错误,我无法从new
到达此处!
URI:/posts/[id]
已呈现的视图:edit
错误,我无法从new
到达此处!
成功提交到:index
不成功的提交请访问:update
如果有人能指出我做错了什么,我会很感激。如果您需要任何其他信息,请询问。
非常感谢!
答案 0 :(得分:1)
问题可能是您用来创建帖子的代码(#setup for save)。您可能正在设置@ post.id,这会导致您的新表单提交更新而不是创建。 form_for帮助程序检查记录是否是新记录,如果是新记录则提交创建,如果已存在则提交更新。
注意:您也不需要检查request.post?在你的创作行动。创建操作应该始终是一个帖子请求。
答案 1 :(得分:0)
你的路线是什么样的?
正如Pan所说,如果不是request.post?
else
特别是没有post?
就不需要捕获{{1}}