如何创建了解完整路径的视图。 (导轨3)

时间:2010-09-28 14:34:45

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

如何设计我的视图以便“记住”其路线?以便/team/1/members/1上的“返回”链接到/team/1/members/members/1链接回/members

我有teammember的模型。团队中有很多成员。

我的路线允许我查看团队中的所有成员或成员。

  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) %>

3 个答案:

答案 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)

您可以查看urligecneresource_controller pluginurl helpers上的{{3}}。它允许您使用object_pathcollection_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答案时,它可能就是你要找的东西!