保存Rails模型后重定向视图

时间:2010-08-12 10:41:34

标签: ruby-on-rails model

当我:

self.save

save!

在模型中,它会自动将我重定向到给定模型的show视图。我怎么能覆盖这个呢?我想保存模型,然后转到同一个控制器中的另一个动作/视图 特别是,我有一个保存成员详细信息的过程,然后我想通过转到下一页继续该过程,例如付款页面,使用已保存模型的ID。

3 个答案:

答案 0 :(得分:3)

在您的控制器中,您可能会遇到以下块:

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

您可以从此处更改redirect_to(在format.html之后)的目标 - 目前它正在引导您访问该用户的记录,即。 @用户。请查看http://api.rubyonrails.org/classes/ActionController/Base.html了解更多信息。

答案 1 :(得分:1)

您的创建/更新方法中可能有这样的块:

    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

因此,如果您的实例变量名为@post,并且在保存后重定向到帖子的show视图,那么您只需将“redirect_to(@ post,...”部分更改为您想要的任何内容。假设你想重定向到你网站的根目录 - 你可以改为

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

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

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

希望有所帮助!

答案 2 :(得分:1)

如果从模型中调用save,则不会将其定向到任何地方,它只是直接模型访问保存到数据库。您的重定向在控制器中的创建和更新操作中进行了描述。您可以通过运行rake routes找到路径列表,然后在保存模型实例时选择希望应用呈现的路径。您可能有一条名为payment_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