Rails4: использование проблем Rails при вызове обратных вызовов

Используя 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

Здесь мне нужно знать, из какого контроллера / модели вызывается этот обратный вызов, чтобы я мог написать свой случай переключения. Например, комментарий к делу: чтобы получить владельца сообщения, к которому пользователь относится, например, к делу: получить владельца msg / cmt, который нравится и т. Д., Любая помощь приветствуется.

1 ответ

Я не знаю точно, что вам нужно, но я бы порекомендовал вам переосмыслить, как он будет работать, потому что кажется, что вы неправильно используете идею о проблеме и собираетесь втянуть себя в беспорядок кода. Если вы пишете оператор switch и проверяете типы для реализации пользовательского поведения для каждого класса, я думаю, что проблема - это неправильный инструмент для использования. Забота, разделяемая между несколькими классами, добавляет одинаковое поведение ко всем этим классам. Похоже, вы хотите поделиться некоторым кодом для СУХОЙ вещи, но затем хотите настроить некоторые аспекты в зависимости от того, какой класс отправляет сообщение. Возможно, здесь лучше использовать вспомогательный метод, который создает класс Notification или NotificationBuilder. Затем каждый класс может получить уведомление и установить его атрибуты в соответствии со своими потребностями. Таким образом, будущие программисты не будут удивлены, когда поведение Comment и User будет отличаться, даже если они оба содержат CreateNotificationModule (что подразумевает, что поведение одинаково).

Я настоятельно рекомендую книгу " Практический объектно-ориентированный дизайн в Ruby: Agile Primer"; это объясняет гораздо красноречивее и убедительнее, чем я, почему утверждение switch, которое вы собираетесь написать, - плохая идея.

Я понимаю, что на самом деле это не ответ, но он не вписался в комментарии. Простите за это.

Другие вопросы по тегам