Работа с объектами ActiveRecord :: Relation - PullRequest
2 голосов
/ 24 июня 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы инициализировать новый ActiveRecord::Relation, чтобы у меня была возможность самому заполнить его объектами класса (все объекты одного и того же "типа"), используя << метод; в противном случае (для моих нужд) мне нужно создать новый класс Ruby array, но с помощью этого массива я не могу запустить методы (например, where, order и т. д.), как для ActiveRecord::Relation.

Видя код RoR Я нашел это в:

def initialize(klass, table)
  @klass, @table = klass, table

  @implicit_readonly = nil
  @loaded            = false

  SINGLE_VALUE_METHODS.each {|v| instance_variable_set(:"@#{v}_value", nil)}
  (ASSOCIATION_METHODS + MULTI_VALUE_METHODS).each {|v| instance_variable_set(:"@#{v}_values", [])}
  @extensions = []
end

но я не нашел хорошую документацию по этому поводу.

Как я могу инициализировать ActiveRecord::Relation? Является ли обычной практикой работа непосредственно с «пользовательскими» ActiveRecord::Relation объектами? О чем вы советуетесь?

P.S .: Может быть, я должен использовать AssociationCollection, потому что в конце всех операций, с которыми я добавляю (используя <<) объекты класса, мне нужно использовать связанный с ним метод replace.

1 Ответ

0 голосов
/ 25 июня 2011

Я не уверен, что понимаю ваши требования.Перезапись инициализации неслыханна для требований приложения.API довольно сильный, и обычно нет необходимости перезаписывать методы AREL.

Не могли бы вы использовать что-то вроде MyModel.scoped для получения базового отношения?Вы ищете 2 коллекции (одну из БД и одну предварительно подготовленную)?

На основании комментария: MyModel.scoped даст базовое отношение - вы можете сделать:* или вы можете подготовить 2 отдельные коллекции, и вы сможете отобразить их соответственно.

@pre_prepared_items = [item1, item2, item3]
@my_items = MyModel.where("x = z").order("a ASC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...