这看起来应该是非常简单的东西,但我似乎无法让它工作。我有一个具有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>
答案 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 ...")
但这可能会给你意想不到的行为。