Rails 3范围仅为has_many关系选择某些属性

时间:2012-01-08 08:33:25

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

这看起来应该是非常简单的东西,但我似乎无法让它工作。我有一个具有has_many关系的模型,我想在父级上使用一个范围,允许我只为每个范围选择某些属性。

一个例子:

class Bakery < ActiveRecord::Base
  has_many :pastries
  scope :summary, select([:id, :name, 'some option calling pastries.summary'])

class Pastry < ActiveRecord::Base
  belongs_to :bakery
  scope :summary, select([:id, :image_url])

我希望能够调用类似Bakery.first.summary之类的东西,并获得一个仅填充了id和名称的Bakery模型,并且它的糕点数组中的每个糕点只填充了id和image_url属性。< / p>

1 个答案:

答案 0 :(得分:1)

您可以这样做,但它不会影响作为结果的SQL查询(假设您正在尝试优化基础查询?):

class Pastry
  ...
  def summary
    {
      :id => self.id,
      :image_url => self.image_url
    }
  end
end

class Bakery
  ...
  def summary     
    pastries.collect {|i| i.summary }
  end
end

然后会给你一个哈希数组,而不是模型实例。

ActiveRecord没有表现出你对模特的期望 - 它会获取它认为你需要的任何数据。您可以查看使用Sequel gem,或执行原始SQL查询,例如:

Pastry.find_by_sql("SELECT id, name from ...")

但这可能会给你意想不到的行为。