как создавать обзоры, используя полиморфные ассоциации - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть три модели, которые могут иметь обзор, и каждый отзыв должен принадлежать пользователю. Я использую полиморфные ассоциации: as =>: рецензируемые, но я не уверен, куда мне поместить логику для создания рецензии для каждой модели. Я бы предположил, что CRUD для каждого обзора должен обрабатываться reviews_controller (или вложенными атрибутами? В других контроллерах?), Но тогда как мне связать обзор с каждой моделью?

Я не смог найти ни одного примера модели / вида / контроллера в Google, возможно, это очень помогло бы прояснить ситуацию.

Спасибо, Cezar

Ответы [ 2 ]

2 голосов
/ 10 марта 2009

Проблема с обработкой объекта в контроллерах проверяемых объектов заключается в том, что вы обнаружите, что повторяете много одинакового кода на каждом из контроллеров. Кроме того, где вы положили код? Либо вы столкнетесь с какими-то серьезными тяжелыми методами действий (с помощью своих 7 существующих действий), либо начнете создавать такие действия, как

new_review, delete_review, etc

, который не является RESTful и представляет собой серьезный запах кода, требующий собственного контроллера.

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

<%= f.hidden_field :reviewable_id, :value => @object.id %>
<%= f.hidden_field :reviewable_type, :value => @object.class %>

Это особенно полезно, если необходимо выполнить какую-либо другую работу с объектом обзора (например, сохранить текущего пользователя как автора и т. Д.), Поскольку он сохраняет всю логику, которую нельзя вытолкнуть к модели в одном месте. Просто убедитесь, что правильно сопоставили связанную модель и убедитесь, что она принадлежит пользователю, в противном случае пользователи могут изменять URL-адрес и добавлять обзоры по своему желанию (конечно, это применимо к любому выбору объекта из предоставленных пользователем данных).

Однако, если объект обзора очень легкий и не требует какой-либо дополнительной обработки (т. Е. Просто присваивает публикуемые данные объекту), вы можете взглянуть на использование Rails 2.3, и это поддержка вложенных объектов .

0 голосов
/ 19 февраля 2009

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

Посмотрите, что делает acts_as_commentable. Это может быть проще изменить, чем бросить свой собственный.

http://github.com/jackdempsey/acts_as_commentable/tree/master

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