为顺序嵌套资源创建 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的主要内容,如果未能解决你的问题,请参考以下文章
嵌套的 Ember.View dragEnter dragLeave 调用顺序错误?