为顺序嵌套资源创建 link_to

Creating link_to for sequential nested resources

我正在创建一个 rails 应用程序,用户可以从记录的 "show" 页面循环浏览记录的嵌套资源(类似于幻灯片)。例如,从 "show" 页面,用户将能够 link 到 "show" 的第一个嵌套资源。从那里,用户将能够 link 到下一个嵌套资源的 "show" 页面等等。由于每个嵌套资源的 ID 应按从小到大的顺序排列,我如何创建一个 link_to 来查找下一个最高 ID(假设同时为多个记录创建嵌套资源,它们可能不一定是连续的)给定记录中的嵌套资源。

由于Rails魔法,您可以将资源直接传递给路由助手,它会为该资源使用正确的ID。例如:

<% @foo.bars.each do |bar| %>
    <%= link_to bar.name, foo_bar_path(@foo, bar) %>
<% end %>

以上假定您的路由文件类似于:

resources :foos do
    resources :bars
end

强烈推荐Rails Routing from the Outside In;这对我来说是非常有用的资源!

要设置 child 资源的顺序,您可以使用 scope,如下所示:

class Bar < ActiveRecord::Base
    scope :ordered, -> { order(id: :asc) }
end

然后在你看来,调用foo.bars.ordered.each do |bar| etc...。您的嵌套资源将从最低 ID 到最高 ID 返回,跳过任何已删除的资源。

我希望这对您的问题有所帮助。

编辑

我看错了问题。要动态生成 "next" id,您可以在 child class 上创建方法 nextThis answer 似乎是你想要的东西。然后在你看来,你可以调用:

<%= link_to "Next", bar_path(current_bar.next) %>