2013-11-15 2 views
2

У меня есть приложение, которое имеет некоторые основные объектыКак сделать ORM (ActiveRecord) Модели для профсоюзных запросов в Rails

сообщений сообщений имеют:

  • Нравится
  • Комментарии
  • и Рейтинги

У меня тогда есть запрос SQL для запроса для всех трех. При этом у меня есть модель, называемая PostActivityView. Столб имеет вид деятельности, так что я могу назвать

@post.activity_view

, который возвращает набор соответствующих значений (от лайков, комментариев и рейтингов). Все это работает правильно.

Моя проблема заключается в том, что это возвращает коллекцию хэшмапов, а не комментариев, отзывов и рейтингов. Это имеет смысл, потому что мой взгляд создает новый результат «с PostEvents as (...)». Мой вопрос: есть ли способ обобщить эти результаты и представить их с помощью объекта ActiveRecord?

Нравится, комментарии и рейтинги имеют разные атрибуты, поэтому я делаю некоторое сглаживание в представлении (комментарий имеет комментарий.body для текста и рейтинги могут иметь rating.comments для текста, поэтому при необходимости я переименовываю что-то вроде review.comments to. тела). Таким образом, мои результаты имеют одинаковые атрибуты. Похоже, я должен иметь возможность создавать объект ActiveRecord, такой как PostEvent, который имеет только псевдонимы. Это возможно?

ответ

1

Я не знаю, как делать то, что вы описываете. Однако вам действительно нужно хранить их в отдельных таблицах? Вы можете сохранить их все в одной таблице и использовать однонаправленное наследование (http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance), чтобы иметь отдельные классы (Likes, Comments или Ratings) для каждого типа вещей, представляемого определенной строкой. Тогда общий материал может сидеть в родительском классе, а материал, относящийся к более деталям, может попасть в классы потомков.

Похоже, ваша ситуация противоположна этому, и вы объединяете отдельные таблицы в один союз. Я подозреваю, что в ActiveRecord было бы очень сложно реализовать, так как разные базы данных имеют разные правила для того, как и когда содержимое представления базы данных может быть изменено (т. Е. Если вы каким-то образом можете создать класс AR, который ссылается на ваш взгляд так, как вы предлагая, что произойдет, когда вы вызовете save?)

1

Похоже, вы пошли по пути предоставления вида, чтобы было удобно извлекать все эти объекты в одном наборе как один тип объекта , когда ваше требование действительно возвращает другие объекты.

Основываясь на этом, я бы поставил под вопрос использование вида вообще. Я не против вас, вы понимаете - мы используем их довольно много для создания отчетов только для чтения в нашем приложении по соображениям производительности, но если вам нужны строки, которые будут возвращены как их правильный тип объекта, я бы извлек их отдельно, как «Комментарии», «Комментарии» и «Рейтинги».

 Смежные вопросы

  • Нет связанных вопросов^_^