我应该如何在Rails和ActiveRecord中表示消息和消息发送?

时间:2014-04-30 18:09:52

标签: ruby-on-rails ruby

我经常想向我的应用程序的用户发送消息。

我在考虑使用像这样的无表格模型:

class Dispatcher
  def any_reason_to_send_message?
    if condition_met
      self.send
    end
  end

  def send
    # do the sending
  end
end

我应该编写我想要完成的实例方法(如上所述)还是类方法?或者我应该将这种逻辑放在一个完全不同的地方(例如module)?

1 个答案:

答案 0 :(得分:1)

调度程序是发送消息的东西,而不是消息本身。不知道您的应用程序中是否确实存在调度程序。我会做一个模型消息。消息#send_message将是一个完全合理的方法。我会将Message设置为保存在表中的普通模型,因为能够回顾并查看何时以及向谁发送消息是很有价值的。

现在,如果你确实有一堆发送消息的代码 - 一个Dispatcher - 并且想知道把它放在哪里,这就是我要做的:

  • 将一个services子目录添加到app(模型,视图等旁边)
  • 将目录添加到config / application.rb
  • 中的config.autoload_paths

现在你有了一个放置新类的地方:一个服务,它将你的应用程序连接到外部。你的dispatcher.rb可以进去。我喜欢制作服务单例,以便在测试中更容易替换。 (是的,我知道单身人士在打字语言方面是邪恶的,但是他们很容易在Ruby中使用,所以这不是一个问题。)

您可以使用Dispatcher#send_message(message)实例方法,该方法使用所需的任何基础技术发送给定消息,以及Message {send_message实例方法,它只执行Dispatcher.instance.send_message self

请注意,Ruby对象已经有一个实例方法send,所以我选择send_message