【发布时间】:2016-09-10 18:20:12
【问题描述】:
假设我有两个模型Author 和Book,其中作者has_many :books 和书籍belongs_to :author。有没有办法在不使用each 遍历所有作者的情况下获取所有作者的所有书籍?
【问题讨论】:
标签: ruby-on-rails ruby activerecord relationship
假设我有两个模型Author 和Book,其中作者has_many :books 和书籍belongs_to :author。有没有办法在不使用each 遍历所有作者的情况下获取所有作者的所有书籍?
【问题讨论】:
标签: ruby-on-rails ruby activerecord relationship
是的,你可以使用joins 或includes,如果你想得到所有有作者的书
Book.includes(:author)
如果您想获得所有书籍,您可以:
Book.all
【讨论】:
您可以使用all 方法。
Book.all
这将返回所有记录在案的书籍。
【讨论】:
它将返回所有有作者的书籍并按作者 ID 分组。
Book.joins(:author).group(:author_id)
【讨论】:
关于 .all 的警告,它实际上会为每一本书创建一个实例。如果您有一张大桌子,这可能会非常昂贵。
如果您在控制台中一次性执行此操作,并且您已经知道桌子的大小是合理的,那么您就可以了。我强烈建议不要将其放入应用程序中,除非您知道该表不会增长。
如果是为了一个视图,实现分页。如果是后端任务,请使用批处理http://api.rubyonrails.org/classes/ActiveRecord/Batches.html。
【讨论】: