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