Ruby on rails 显示';最近的';两种型号的列表';在Rails中创建对象

Ruby on rails 显示';最近的';两种型号的列表';在Rails中创建对象,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有两个模型,指南和列表。我想展示最近10个指南和列表的提要 在Rails中执行此操作的最佳方式是什么 我试图通过控制器中的一个实例变量来实现这一点,但这似乎是错误的。有什么建议吗?谢谢我的答案是:范围。您基本上是在问这个问题:,但在使用Rails 4时,我建议您在指南中学习更多关于作用域的知识: 作用域的替代方案。到达目的地总是有多种方式。对于这种类型的最新帖子子集的快速插入,还可以使用可以从视图中调用的helper方法。它将返回一组记录,这些记录可以传递给一个分部进行渲染。您可以根据需要对结

我有两个模型,指南和列表。我想展示最近10个指南和列表的提要

在Rails中执行此操作的最佳方式是什么


我试图通过控制器中的一个实例变量来实现这一点,但这似乎是错误的。有什么建议吗?谢谢

我的答案是:范围。您基本上是在问这个问题:,但在使用Rails 4时,我建议您在指南中学习更多关于作用域的知识:

作用域的替代方案。到达目的地总是有多种方式。对于这种类型的最新帖子子集的快速插入,还可以使用可以从视图中调用的helper方法。它将返回一组记录,这些记录可以传递给一个分部进行渲染。您可以根据需要对结果进行组合和排序。((nbr_to_show)是我的实现,您可以直接使用值。)

在指南中_helper.rb

   # Display the latest nbr_to_show guides
  def the_latest_guides(nbr_to_show)
    Guide.order("created_at DESC").limit(nbr_to_show)
  end  
查看视图代码可能也会有所帮助

<%= render partial: 'guides/guide_partial', collection: the_latest_guides(10)} %>   

在Rails中执行此操作的最佳方式是什么

在这种情况下,约定是定义作用域而不是帮助器方法

在您的
指南
清单
模型中定义两个范围:

guide.rb,listing.rb

您的_controller.rb


每个模型应该是5个,还是10个?两种方法都可以。我只是随便选了个号码。假设每人10英镑。@Taylor,希望你明白了。谢谢。这是最新的部分,但我真正的挑战是如何显示指南和列表的组合列表。这是我偶然发现的唯一方法。。。另外,您的排序定义可能不同。助手代码至少应该移动到控制器,但最好作为作用域建模。我没有以这种方式使用过很多作用域。我也在尝试学习新的想法等。使用作用域比使用助手有什么好处?作用域用于指定经常使用的查询,这些查询可以作为模型上的方法调用引用。这将返回ActiveRecord::Relation对象,因此您将能够链接作用域。比如
Model.latest\u feed.about\u food
我有一个主应用程序页面,在那里我可以在不同的桌子上显示不同的视图--“前十大餐馆”按评级排序--“最新评论”按日期发布,诸如此类,从不同的桌子上。这就是为什么我使用helper,因为我的视图在任何控制器之外,查看表。我不知道模型范围是否会有帮助。你认为会吗?我一直在寻找更好的方法。@Valerie,作用域就像模型的助手方法。通常帮助程序用于显示方法,但不用于处理模型集合,而作用域在处理模型集合时为您提供了灵活性很高兴了解这一点。谢谢你的解释,@Avdept。
scope :latest_feed, ->(n) { order(created_at: :desc).limit(n) }
@latest_guides = Guide.latest_feed(5)
@latest_listings = Listing.latest_feed(5)