0

使用 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 的所有者等,任何帮助表示赞赏。

4

1 回答 1

1

我不确切知道您的需求是什么,但我建议您重新考虑他的工作方式,因为您似乎在滥用关注点的概念,并且会让自己陷入代码混乱。如果您正在编写一个 switch 语句并检查类型以实现每个类的自定义行为,我认为一个问题是使用错误的工具。几个类之间共享的关注点为所有这些类添加了相同的行为。似乎您想共享一些代码来干燥事物,但又想根据哪个类发送消息来自定义某些方面。也许构建 Notification 或 NotificationBuilder 类的辅助方法在这里会更好。然后每个类可以得到一个通知并根据他们的需要设置它的属性。这样未来的程序员就不会

我强烈推荐《Ruby 中的实用面向对象设计:敏捷入门》一书;它比我更雄辩和令人信服地解释了为什么你要编写的 switch 语句是一个坏主意。

我意识到这实际上不是一个答案,但它不适合评论。对此感到抱歉。

于 2014-04-11T14:47:01.287 回答