私信:如何REST-ify回复/预览/草稿控制器动作?

时间:2011-02-11 16:01:37

标签: ruby-on-rails ruby rest messaging message

我正在为一个项目开发一个简单的消息系统。试图坚持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

现在我使用7个RESTful方法定义了MessagesController。我可以使用new(渲染表单)和创建(实际发送msg)方法发送新消息。

问题:

  1. 如何使用REST处理回复功能?我想添加另一个名为reply的方法,它的功能与new()一样,可以呈现表单,也可以提交给create()。还有更好的方法吗?
  2. 消息预览功能?添加其他动作?新控制器?
  3. 如何处理保存草稿消息(未指定recipient_id)? 我应该重新使用create方法吗? MessagesController?
  4. 对任何建议持开放态度。提前谢谢。

1 个答案:

答案 0 :(得分:1)

草稿只是一条尚未发送的消息,可能还没有完成。

我建议你在邮件中添加一个布尔属性'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>