为顺序嵌套资源创建 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 上创建方法 next
。 This answer 似乎是你想要的东西。然后在你看来,你可以调用:
<%= link_to "Next", bar_path(current_bar.next) %>
我正在创建一个 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 上创建方法 next
。 This answer 似乎是你想要的东西。然后在你看来,你可以调用:
<%= link_to "Next", bar_path(current_bar.next) %>