为顺序嵌套资源创建 link_to

Posted

技术标签:

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

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

【问题讨论】:

您能否提供一些相关代码以更清楚地了解您要做什么? 基本上我想创建这些函数: 和 但我不确定这是否可能/语法是什么。抱歉,如果不清楚,我不知道是否有任何有用的特定代码。 【参考方案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) %>

【讨论】:

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

以上是关于为顺序嵌套资源创建 link_to的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 link_to 路由(编辑)嵌套资源

嵌套的 Ember.View dragEnter dragLeave 调用顺序错误?

vue嵌套组件的生命周期

Django Rest-Framework 嵌套序列化器顺序

两个for循环执行顺序

无法使用link_to或button_to rails访问嵌套路由