【问题标题】:Creating link_to for sequential nested resources为顺序嵌套资源创建 link_to
【发布时间】:2019-08-22 00:48:53
【问题描述】:

我正在创建一个 Rails 应用程序,用户可以从记录的“显示”页面循环浏览记录的嵌套资源(类似于幻灯片)。例如,从“显示”页面,用户将能够链接到第一个嵌套资源的“显示”。从那里,用户将能够链接到下一个嵌套资源的“显示”页面,依此类推。由于每个嵌套资源的 id 应该从最小到最大排序,我如何创建一个 link_to 来查找嵌套资源的下一个最高 id(假设同时为多个记录创建嵌套资源,它们可能不一定是连续的)给定的记录。

【问题讨论】:

  • 您能否提供一些相关代码以更清楚地了解您要做什么?
  • 基本上我想创建这些函数: 和 但我不确定这是否可能/语法是什么。抱歉,如果不清楚,我不知道是否有任何有用的特定代码。

标签: ruby-on-rails methods hyperlink nested-resources


【解决方案1】:

由于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,您可以在子类上创建方法next。 This answer 似乎是你想要的。然后在您看来,您可以调用:

<%= link_to "Next", bar_path(current_bar.next) %>

【讨论】:

  • 我喜欢你看待这个的方式,但我想看看我能不能更进一步。我不想看到链接列表,类似于使用“每个”功能的索引,我想将链接压缩成一个“下一个”链接,该链接会自动将用户重定向到序列中的下一个“显示”页面。在这方面有什么想法吗?
  • 啊,我看错了你的问题,我的错。我已经用我认为可行的方法更新了我的答案。希望这次我的想法是对的。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多