代码之家  ›  专栏  ›  技术社区  ›  amaseuk

保存Rails模型后重定向视图

  •  1
  • amaseuk  · 技术社区  · 14 年前

    当我:

    self.save
    

    save!
    

    在模型中,它会自动将我重定向到给定模型的显示视图。我怎么能推翻这个?我想保存模型,然后转到同一控制器中的另一个操作/视图。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Budgie    14 年前

    在您的控制器中,可能有一个块,如:

    def create
      @user = User.new(params[:place])
    
      respond_to do |format|
        if @user.save
          format.html { redirect_to(@user, :notice => 'User was successfully created.') }
          format.xml  { render :xml => @user, :status => :created, :location => @user }
        else
          format.html { render :action => "new" }
          format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
        end
      end
    end
    

    http://api.rubyonrails.org/classes/ActionController/Base.html 更多信息。

        2
  •  1
  •   codykrieger    14 年前

    在create/update方法中可能有这样一个块:

        respond_to do |format|
          if @post.save
            format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
            format.xml  { render :xml => @post, :status => :created, :location => @post }
          else
            format.html { render :action => "new" }
            format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
          end
        end
    

    redirect_to(root_path, :notice => 'Post was successfully created.')
    

    在您的特定情况下,如果您设置了路线,则可以使用以下内容:

    redirect_to(payment_page_path(@post), :notice => 'Post was successfully created.')
    

        3
  •  1
  •   Jed Schneider    14 年前

    如果您从模型中调用save,您将不会被定向到任何地方,它只执行直接模型访问保存到数据库。您的重定向在控制器的创建和更新操作中进行了描述。您可以通过运行 rake routes 然后选择在保存模型实例时希望应用程序呈现的路径。您可能有一个名为payment\u path的路由,在您的控制器中可能是这样的

    map.payment :controller => :payments_controller, :action => index
    

    你会在你的创造行动中说

    def create
      if @item.save(params[:item])
        redirect_to payment_path 
      else
        flash[:error] = "there was a problem"
        render :action => buy
      end
    end
    

    如果需要将参数(如用户id)传递给路由,则需要将其包含在路径参数中

    redirect_to payment_path(@user) #=> automagically finds the id of active record models