我需要在页面上的选择查询和列表中将两个不同的模型连接在一起。它们共享我需要在视图中引用的所有属性(created_at,updated_at,name等),并且我希望它们按创建顺序排列。我想知道最有效的方法是什么?我正在考虑单独对每个对象执行选择查询,并将相关部分添加到公共数组中,但这似乎效率低下。
例如,如果我的模特是狗和猫,我想要一份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
但这是最好的方法吗?另外,我不确定如何根据创建的日期对此示例中的已完成数组进行排序...
答案 0 :(得分: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