Личные сообщения: как REST-ify ответить / просмотреть / составить план действий контроллера - PullRequest
0 голосов
/ 11 февраля 2011

Я работаю над простой системой сообщений для проекта. Попытка придерживаться REST руководств.

У меня есть следующие модели:

class Member << AR::Base
  has_many :sent_messages, :class => 'Message', :foreign_key => :sender_id
  has_many :received_messages, :class => 'Message', :foreign_key => :recipient_id
end

class Message << AR::Base
  belongs_to :sender, :class_name => 'Member', :foreign_key => :sender_id
  belongs_to :recipient, , :class_name => 'Member', :foreign_key => :recipient_id
end

Теперь у меня есть MessagesController, определенный с помощью 7 методов RESTful. Я могу отправить новое сообщение, используя методы new (для отображения формы) и create (для отправки msg).

Вопросы:

  1. Как работать с ответами с помощью REST? Хотя я добавил еще один метод с именем reply, который будет функционировать так же, как new (), для визуализации формы, а также отправит create (). Есть ли лучший способ?
  2. Функция предварительного просмотра сообщения? Добавить еще одно действие? Новый контроллер?
  3. Как обработать сохранение черновика сообщения (идентификатор получателя не указан)? Должен ли я повторно использовать метод создания в MessagesController

Открыт для любых предложений. Заранее спасибо.

1 Ответ

1 голос
/ 11 февраля 2011

Черновик - это просто сообщение, которое еще не было отправлено, и, возможно, оно не завершено.

Я предлагаю добавить в сообщение логический атрибут 'sent'.Если вы сохраняете объект с помощью 'sent = false', тогда вы выполняете только частичные проверки (если они вообще есть).Таким образом, вы справились с проблемой «сохранения черновика».

Если вы сохраняете сообщение с помощью «sent = true», вы запускаете полную проверку, сохраняете объект в базе данных и фактически отправляете его.

Не думайте о методе create как о другом слове, равном «send».Вы отправляете сообщение, когда сохраняете его в состоянии, позволяющем отправить его.При этом не имеет значения, помечает ли пользователь сообщение как готовое при его создании или обновлении.Обрабатывайте его на уровне модели.

Чем отличается «предварительный просмотр» по функциональности от простого чтения сообщения?Стандарт GET /messages/1 должен быть в порядке.

Об ответе.Что отвечает?Это просто создание нового сообщения с некоторыми предопределенными полями.Сделайте так, чтобы ваше действие :new распознало дополнительные параметры и предоставило ссылку на все связанные представления, например:

<a href="/messages/new?to=john@example.com&amp;in-reply-to=&lt;1234...&gt;">Reply</a>
...