我正在创建一个rails应用程序,从记录的"显示"页面,用户可以循环浏览记录的嵌套资源(类似于幻灯片(。例如,从"显示"页面,用户将能够链接到第一个嵌套资源的"显示"。从那里,用户将能够链接到下一个嵌套资源的"显示"页面,依此类推。由于每个嵌套资源的 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 Out from the Outside;它对我来说是一个非常有用的资源!
若要设置子资源的顺序,可以使用作用域,如下所示:
class Bar < ActiveRecord::Base
scope :ordered, -> { order(id: :asc) }
end
然后在您看来,致电foo.bars.ordered.each do |bar| etc...
.嵌套资源将从最低 ID 返回到最高 ID,跳过已删除的任何 ID。
我希望这对您的要求有所帮助。
编辑
我误读了这个问题。要动态生成"下一个"id,您可以在子类上创建方法next
。这个答案似乎与你想要的差不多。那么在您看来,您只需调用:
<%= link_to "Next", bar_path(current_bar.next) %>