我有两种不同的方式来访问网址“localhost:3000 / childrens / new”。
我在子页面/新页面中有一个下拉菜单,当用户通过下拉列表选择一个选项时,它会使用ajax显示不同的部分来调用孩子们的#new方法。
成功创建子项后,应将用户重定向到相关URL(localhost:3000 / parents或localhost:3000 / parents1)
答案 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
将完美地完成工作