Rails如何保存请求的URL?

时间:2013-06-11 09:01:50

标签: ruby-on-rails ruby ruby-on-rails-3 redirect

我有两种不同的方式来访问网址“localhost:3000 / childrens / new”。

我在子页面/新页面中有一个下拉菜单,当用户通过下拉列表选择一个选项时,它会使用ajax显示不同的部分来调用孩子们的#new方法。

  1. 从网址“localhost:3000 / parents”
  2. 访问儿童新页面
  3. 从网址“localhost:3000 / parents1”
  4. 访问儿童新页面

    成功创建子项后,应将用户重定向到相关URL(localhost:3000 / parents或localhost:3000 / parents1)

5 个答案:

答案 0 :(得分:2)

将值存储在父

中的session[:last_request]之类的会话中

创建子项后,将其重定向到session[:last_request] || session[:return_to],然后清除session[:last_request]

答案 1 :(得分:1)

如何实现这一目标的方法不止一种。

一个解决方案是在请求childrens / new时将referrer存储在session / cookie中:(在children_controller中)

def new
  session['children_new_referrer'] = request.env["HTTP_REFERER"]
  #....YOUR CODE....
end

然后使用存储在session / cookie中的引用值来适当地重定向:

def create
  #.....YOUR CODE....
  if @child.save
    format.html {redirect_to (session['children_new_referrer'] || parents_path)}
  #.....YOUR CODE....
end

其中@child是我假设您使用参数构建的对象,并且通过您的路由定义了parents_path。您可以根据自己的需要随意调整这两项。

另一种解决方案是不使用会话,而是将referrer uri / path保存在children / new表单页面内。此替代方案的好处是使解决方案会话/请求范围独立于处理在页面范围内存储引用uri /路径的要求。

答案 2 :(得分:0)

做这样的事情

def create

redirect_to :back

end

redirect_to:返回应该在保存之后。

答案 3 :(得分:0)

将引荐来源作为链接中的参数传递。我更喜欢这个解决方案来使用会话存储。

<%= link_to "New child", new_child_path(referrer: @parent.id) %>

..或任何你想称之为的东西。然后你可以检查params[:referrer]。您不希望在“会话”中保留数据,因此为什么要使用会话存储。

答案 4 :(得分:0)

request.url
控制器中的

会提供您要求的网址。 所以,

def create
    if @child.save
        redirect_to request.url
    end
end

将完美地完成工作