我正在创建一个Rails应用程序,由此用户可以从记录的“显示”页面中浏览记录的嵌套资源(类似于幻灯片显示)。例如,从“显示”页面,用户将能够链接到第一个嵌套资源的“显示”。从那里,用户将能够链接到下一个嵌套资源的“显示”页面,依此类推。由于每个嵌套资源的ID的顺序应从小到大,因此我如何创建一个link_to来查找嵌套资源的下一个最高ID(假设同时为多个记录创建了嵌套资源,它们不一定是顺序的)给定的记录。
答案 0 :(得分:0)
由于 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) %>