如何遍历持久性和非持久性儿童?

时间:2018-09-25 21:50:16

标签: ruby-on-rails activerecord

必须缺少一种我无法做到的方式。说我有...

Category
  has_many :products

Product
  belongs_to :category

现在,我在内存中建立了许多新子级(例如在表单对象内部),如下所示:

category.products.build(name: "blah blah", etc...)

使用 .each 调用ActiveRecord并仅通过持久子项进行迭代

category.products.each do |product|

是否有一种方法可以遍历 ALL 子项,而不管它们是在内存中还是在数据库中保存?并使所有 .order 子句也有效吗?

1 个答案:

答案 0 :(得分:0)

您确定要在构建产品和对其进行迭代之间不以某种方式重新加载类别吗?只是做了一个快速测试,这似乎可以按您的预期工作(其他型号名称,相同的关联):

2.5.1 :018 > c = Channel.first
  Channel Load (0.1ms)  SELECT  "channels".* FROM "channels" ORDER BY "channels"."id" ASC LIMIT ?  [["LIMIT", 1]]
 => #<Channel id: 1> 
2.5.1 :019 > c.channel_users.build
 => #<ChannelUser id: nil, enabled: nil, status: nil, last_grant_at: nil, channel_id: 1> 
2.5.1 :020 > c.channel_users.each { |cu| p cu }
  ChannelUser Load (0.2ms)  SELECT "channel_users".* FROM "channel_users" WHERE "channel_users"."channel_id" = ?  [["channel_id", 1]]
#<ChannelUser id: 1, enabled: nil, status: "blocking", last_grant_at: "2018-09-15 18:32:04", channel_id: 1>
#<ChannelUser id: nil, enabled: nil, status: nil, last_grant_at: nil, channel_id: 1>