0

我有两个不同的模型,需要在选择查询和页面列表中连接在一起。它们共享我需要在视图中引用的所有属性(created_at、updated_at、name 等),并且我希望它们按创建顺序排列。我想知道最有效的方法是什么?我正在考虑单独对每个对象执行选择查询并将相关部分添加到一个公共数组中,但这似乎效率低下。

例如,如果我的模型是 Dogs 和 Cats,我想要一份所有 5 岁的狗和猫的列表,我在想类似的东西

@pets = []
dogs = Dogs.where(:age => 5)
cats = Cats.where(:age => 5)
dogs.each do |dog|
  hash = {"id" => dog.id, "name" => dog.name, "created_at" => dog.created_at }
  @pets.push(hash)
end 
cats.each do |cat|
  hash = {"id" => cat.id, "name" => cat.name, "created_at" => cat.created_at }
  @pets.push(hash)
end 

但这是最好的方法吗?另外,我不确定如何根据创建日期对本示例中的完成数组进行排序...

4

1 回答 1

1

尝试这个

dogs = Dogs.where(:age => 5)
cats = Cats.where(:age => 5)
@pets = (dogs + cats).sort_by { |pet| pet.created_at }

或者,如果您仍然想要散列,请使用 map 创建散列数组

dogs = Dogs.where(:age => 5)
cats = Cats.where(:age => 5)
@pets = (dogs + cats).sort_by do |pet| 
  pet.created_at 
end.map do |pet| 
  { "id" => dog.id, "name" => pet.name, "created_at" => pet.created_at }
end
于 2013-04-11T03:00:06.463 回答