如何设计我的视图以便“记住”其路线?以便/team/1/members/1
上的“返回”链接到/team/1/members
和/members/1
链接回/members
?
我有team
和member
的模型。团队中有很多成员。
我的路线允许我查看团队中的所有成员或成员。
resources :teams do
resources :members
end
resources :members do
resources :member_parts
end
我目前试图保持路线一致。但这样做我似乎不得不重复自己并在视图中添加许多逻辑。 (这似乎不对)
摘自app/views/members/show.html.erb
<%= link_to 'Edit', params[:team_id].nil? ? edit_member_path(@member) : edit_team_member_path(@member.team,@member) %> |
<%= link_to 'Back', params[:team_id].nil? ? members_path : team_members_path(@member.team) %>
答案 0 :(得分:2)
快速入侵,未在Rails3中测试过,您可能需要对其进行修改:
在application_controller.rb
中before_filter :store_location
def store_location
session[:return_to] = request.fullpath
end
def redirect_back_or_default(default=root_path, flash=nil)
session[:return_to] ||= default
redirect_to(session[:return_to], flash)
session[:return_to] = nil
end
在您的路线中
match '/back' => 'application#redirect_back_or_default
“
在您的观点中
<%= link_to 'Back', '/back' %>
您也可以在行动中使用此redirect_back_or_default方法......
答案 1 :(得分:2)
<强>更新强> 更新了代码,问题是,该方法无法识别路径,因为我只提供了一个id而不是一个类。
使用多态路径。
编辑链接:
生成路径数组
paths = []
paths << @member.team if params[:team_id]
paths << @member
polymorphic_path(paths,:action=>:edit)
paths2 = []
paths2 << @member.team if params[:team_id]
paths2 << :members
polymorphic_path(paths2)
有关详细信息,请参阅Rails api
希望这将是一个很好的起点。
答案 2 :(得分:1)
您可以查看urligecne中resource_controller plugin及url helpers上的{{3}}。它允许您使用object_path
或collection_path
,并根据当前网址返回路径,因此它只是按照您的意愿执行。
您还可以添加这个肮脏和丑陋的解决方案:
# application helper
def collection_path
request.request_uri.gsub(/\/[\d]+[\/]*$/, "")
end
它应该从您的网址末尾删除“/ 2 /”或“/ 14”或“/”等字符串。但是我觉得使用正则表达式非常周,所以要小心这一点。
您可以在视图中使用此帮助程序:
<%= link_to "Back", collection_path %>
同样要生成edit
路径,您只需在当前网址末尾添加“编辑”字符串即可。您可以为此创建edit_object_path
帮助程序:
def edit_object_path
request.request_uri.chop('/') + "/edit"
end
但这又是一个非常脏的解决方案,你应该小心。
编辑: 当我看@dombesz答案时,它可能就是你要找的东西!