Rails4:在调用回调时使用Rails问题

时间:2014-02-21 03:59:42

标签: ruby-on-rails-4 callback activesupport-concern

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

1 个答案:

答案 0 :(得分:1)

我不确切地知道你的需求是什么,但我建议你重新思考他的工作方式,因为你似乎在滥用关注的想法,并且会让自己陷入困境这条线。如果您正在编写switch语句并检查类型以实现每个类的自定义行为,我认为关注是错误的工具。在几个类之间共享的问题为所有这些类添加了相同的行为。好像你想分享一些代码来干掉东西,但后来想根据哪个类发送消息来定制一些方面。也许构建Notification或NotificationBuilder类的辅助方法在这里会更好。然后每个班级都可以获得通知并根据他们的需要设置它的属性。这样,当评论和用户的行为不同时,即使它们都包含CreateNotificationModule(这意味着行为是相同的),未来的程序员也会感到惊讶。

我强烈推荐这本书Practical Object Oriented Design in Ruby: An Agile Primer;它更有说服力和令人信服地解释为什么你要编写的switch语句是个坏主意。

我意识到这实际上并不是一个答案,但它并不符合评论。对不起。