为顺序嵌套资源创建link_to



我正在创建一个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) %>

最新更新