使用select查询中的新关系创建activerecord对象

时间:2014-09-17 13:58:28

标签: ruby-on-rails ruby activerecord

我想创建一个模型对象列表,指定一个新的关系,而不必使用原始的SQL。

假设我有以下型号:

class MealCombination < ActiveRecord::Base
   belongs_to :drink
   belongs_to :food
end

class Food < ActiveRecord::Base
   has_many :meal_combinations
end

class Drink < ActiveRecord::Base
   has_many :meal_combinations
end

我想创建一个目前数据库中不存在的MealCombination对象列表。

说我的查询看起来像这样:

select distinct DRINK.id, FOOD.id from FOOD, DRINK where DRINK.alchohol_volume > 5 and FOOD.spice_factor > 45;

从此选择中创建MealCombination个对象的最有效方法是什么?

迭代从原始sql返回的数组似乎效率低下。我不想将对象持久化到数据库中。

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是创建一个名为&#34; meal_combinations&#34;在您的数据库中,它将代表您要执行的选择查询。 ActiveRecord应该将视图视为一个表,但你绝对应该添加

  def read_only?
    true
  end

到任何使用视图的类定义。拥有大量视图的主要缺点是,如果您想要更改基础表中的列,它们会使数据库迁移变得更难以管理。