Rails形成新的/创建,编辑/更新的重定向

时间:2011-02-01 02:20:27

标签: ruby-on-rails

我正在使用Rails 2.3.8

我遇到了在表单中出现错误后呈现的操作的问题。

所以我有一个posts控制器和常规相关操作,indexnewcreateeditupdateshow

以下是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

如果有人能指出我做错了什么,我会很感激。如果您需要任何其他信息,请询问。

非常感谢!

2 个答案:

答案 0 :(得分:1)

问题可能是您用来创建帖子的代码(#setup for save)。您可能正在设置@ post.id,这会导致您的新表单提交更新而不是创建。 form_for帮助程序检查记录是否是新记录,如果是新记录则提交创建,如果已存在则提交更新。

注意:您也不需要检查request.post?在你的创作行动。创建操作应该始终是一个帖子请求。

答案 1 :(得分:0)

你的路线是什么样的?

正如Pan所说,如果不是request.post?

,那么else特别是没有post?就不需要捕获{{1}}