0

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

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

  1. 从 url "localhost:3000/parents" 访问孩子的新页面
  2. 从 url "localhost:3000/parents1" 访问孩子的新页面

成功创建孩子后,用户应该被重定向到相关的 url(localhost:3000/parents 或 localhost:3000/parents1)

4

5 回答 5

2

session[:last_request]像在父级中一样将值存储在会话中

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

于 2013-06-11T09:58:57.030 回答
1

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

一种解决方案是在请求 children/new 时将引用者存储在 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 正在通过您的路线定义。随意根据您的需要调整这两个。

另一种解决方案是不使用会话,而是将引荐来源网址/路径保存在子/新表单页面本身内。这种替代方案的好处是使解决方案会话/请求范围独立于处理在页面范围内存储引用 uri/路径的要求。

于 2013-06-11T09:59:52.277 回答
0

做这样的事情

def create

redirect_to :back

end

redirect_to :back 应该在保存之后出现。

于 2013-06-11T09:14:07.807 回答
0

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

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

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

于 2013-06-11T10:28:29.487 回答
0
request.url

在您的控制器中给出您要求的网址。所以,

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

将完美地完成工作

于 2013-06-11T10:52:08.883 回答