Mailboxer allows you to connect multiple models as in the example from the gem page. <a href="https://github.com/mailboxer/mailboxer" rel="nofollow">Mailboxer Github page</a><blockquote>
You can use Mailboxer in any other model and use it in several different models. If you have ducks and cylons in your application and you want to exchange messages as if they were the same, just add acts_as_messageable to each one and you will be able to send duck-duck, duck-cylon, cylon-duck and cylon-cylon messages.</blockquote>
How can we restrict messaging to only between duck-cylon and vice versa? So, only a duck can initiate a conversation and a cylon can reply? And, no duck-duck and cylon-cylon conversations are possible?Answer1:
You could add a module to the models
class Duck < ActiveRecord::Base acts_as_messageable include mailboxer_filter end
class Cylon < ActiveRecord::Base acts_as_messageable include mailboxer_filter end
module MalboxerFilter def initiator? self.class == Duck end def replyer? self.class == Cylon end def send_message_filtered(beta, body, subject) self.send_message(beta, body, subject) if initiator? && beta.replyer? end def reply_to_sender_filtered(*args) self.reply_to_sender(*args) if replyer? end end
reply_to_sender_filtered in your app. This can be more sophisticated if you need it... perhaps raise an exception if a Cylon attempts to initiate a message or a Duck attempts to reply.