使用rails4,我正在尝试实现通知模型。在这里,我使用ActiveSupport :: Concern将我的通知相关代码与模型分开。 create_notification_module.rb
module CreateNotificationModule
extend ActiveSupport::Concern
include ActiveModel::Dirty
included do
after_update :notify
after_create :notify
after_create :notify
end
def notify
record = Notification.new(
:ref_table => self.class,
:ref_id => self.id,
:receiver => ? , # owner of the parent model if parent exists
:sender => current_user.id,
:details => self.changes,
:is_read => 0)
record.save!
end
这里我需要知道调用这个回调的控制器/模型,以便我可以编写我的switch case。例如, 案例评论:获取用户评论的消息的所有者 案例如:获得喜欢的msg / cmt的所有者等,任何帮助都表示赞赏。
答案 0 :(得分:1)
我不确切地知道你的需求是什么,但我建议你重新思考他的工作方式,因为你似乎在滥用关注的想法,并且会让自己陷入困境这条线。如果您正在编写switch语句并检查类型以实现每个类的自定义行为,我认为关注是错误的工具。在几个类之间共享的问题为所有这些类添加了相同的行为。好像你想分享一些代码来干掉东西,但后来想根据哪个类发送消息来定制一些方面。也许构建Notification或NotificationBuilder类的辅助方法在这里会更好。然后每个班级都可以获得通知并根据他们的需要设置它的属性。这样,当评论和用户的行为不同时,即使它们都包含CreateNotificationModule(这意味着行为是相同的),未来的程序员也会感到惊讶。
我强烈推荐这本书Practical Object Oriented Design in Ruby: An Agile Primer;它更有说服力和令人信服地解释为什么你要编写的switch语句是个坏主意。
我意识到这实际上并不是一个答案,但它并不符合评论。对不起。