我的创建操作中的多个重定向导致错误

时间:2013-12-30 16:25:27

标签: ruby-on-rails ruby ruby-on-rails-3.2

我的多步骤表单中的创建操作存在一些问题。当我提交付款表单时,我在最后一页收到错误(渲染重定向不能被调用两次)

@post.all_valid?为真时,如何让我的创建操作与渲染新建和重定向一起工作?

我的控制器操作如下所示:

 def create
    session[:post_params].deep_merge!(params[:post]) if params[:post]
    @post = Post.new(session[:post_params])
    @post.current_step = session[:post_step]

    if @post.valid?
      if params[:back_button]
        @post.previous_step
      elsif @post.last_step?
          if @post.all_valid?
            @post.save_with_payment 
            flash[:notice] =  'Your post was created successfully' 
            redirect_to @post
          end
      else
        @post.next_step
      end

    session[:post_step] =  @post.current_step
    end

    if @post.new_record?
        render "new"
    else
        session[:post_step] = session[:post_params] = nil
    end
  end

2 个答案:

答案 0 :(得分:2)

如果您使用多个render来电或redirect_torender的组合,则需要指定return以及除最后一个之外的所有内容那些电话。一般来说,我甚至在最后一次通话中使用return也只是为了明确。原因是因为redirect_toreturn都没有停止执行,因此你看到了你所看到的错误。

尝试一下:

def create
  session[:post_params].deep_merge!(params[:post]) if params[:post]
  @post = Post.new(session[:post_params])
  @post.current_step = session[:post_step]

  if @post.valid?
    if params[:back_button]
      @post.previous_step
    elsif @post.last_step?
      if @post.all_valid?
        @post.save_with_payment 
        flash[:notice] =  'Your post was created successfully' 
        redirect_to @post and return
      end
    else
      @post.next_step
    end

    session[:post_step] =  @post.current_step
  end

  if @post.new_record?
    return render "new"
  else
    session[:post_step] = session[:post_params] = nil
  end
end

同样,您的代码与上述代码之间的区别在于and returnredirect_to之后的render

另一种方法是说return redirect_to ...return render ...,但我更喜欢上述内容,因为它更具“可读性”。

答案 1 :(得分:1)

在第一次出现后添加“并返回”