ОБНОВИТЬ:
Как добавить в модель виртуальный атрибут и сохранить отношение активной записи.
Я пробовал следующее, но .each возвращает массив, а не активную запись. Какой еще метод я могу использовать?
Мой метод set_listable_for
преобразует отношение activerecord в массив. Я хочу сохранить отношение ActiveRecord.
Во время выполнения я добавил attr_access к модели активной записи.
def add_listable_attribute_to(*relation)
relation.each do |rel|
rel[1].first.class.class_eval do
attr_accessor :listable
end
end
end
Затем я использовал этот метод, чтобы установить значение атрибута на одно и то же значение для всех записей....
def set_listable_for(relation, object)
relation.each do |record|
record.listable = object
end
end
Однако мое отношение ActiveRecord преобразуется в послесловие массива.
Как сохранить отношение Active Record, так как мне не нужен массив. Поскольку я продолжаю использовать его здесь и продолжаю анализировать и запрашивать его...
def union_scope(*relation)
add_listable_attribute_to(*relation)
listable = relation.first[0]
combined = set_listable_for(relation.first[1], listable)
relation.drop(1).each do |relation_set|
listable = relation[0]
set_listable_for(relation_set[1], listable)
combined = combined.or(relation_set[1])
end
combined
end
Спасибо
ActiveRecord::Relation
. Он представляет собой область или запрос, который можно выполнить для базы данных (пока нет записей). И как только вам понадобится одна или несколько фактических записей, он загрузит записи и вернет их в виде массива. Это происходит, если вы вызываете метод типаfirst
,count
илиeach
для отношения. Поэтому ваш вопрос мне неясен, потому что вы просите отключить его основные функции. - person spickermann   schedule 26.07.2019