В Rails 3 scope выбираются только определенные атрибуты для отношения has_many - PullRequest
0 голосов
/ 08 января 2012

Похоже, это должно быть что-то довольно легкое, но я не могу заставить его работать.У меня есть модель с отношением 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 и получать модель Bakery с заполненными только идентификатором и именем, а для каждого теста в его массиве выпечки нужно заполнять только атрибуты id и image_url.

1 Ответ

1 голос
/ 08 января 2012

Вы можете сделать это, но это не повлияет на 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 или выполнить необработанный запрос SQL, например:

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

Но это может дать вам неожиданное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...