【问题标题】:Best way to join two different model queries in Rails?在 Rails 中加入两个不同模型查询的最佳方法?
【发布时间】:2013-04-11 02:14:51
【问题描述】:

我有两个不同的模型,我需要在选择查询和页面列表中将它们连接在一起。它们共享我需要在视图中引用的所有属性(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 

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-15
      • 2020-09-23
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多