我正在创建一个rails应用程序,通过记录的“显示”页面,用户可以循环浏览记录的嵌套资源(类似于幻灯片)。例如,从“show”页面,用户将能够链接到第一个嵌套资源的“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;这对我来说是一个非常有用的资源!
要设置子资源的顺序,您可以使用scope,如下所示:
class Bar < ActiveRecord::Base
scope :ordered, -> { order(id: :asc) }
end
然后在你看来,打电话给foo.bars.ordered.each do |bar| etc...
。您的嵌套资源将从最低ID返回到最高ID,并跳过已删除的任何ID。
我希望这有助于你所要求的。
编辑
我误解了这个问题。要动态生成“下一个”id,可以在子类上创建方法next
。 This answer似乎是你想要的东西。然后在您的视图中,您可以致电:
<%= link_to "Next", bar_path(current_bar.next) %>