我的Rails应用有活动和用户。如果/当它们被添加到事件中时,我需要向用户发送消息,无论是正在创建的新事件还是正在更新的现有事件。为了避免多次发送消息,我正在考虑这样的设计模式:
class Event < ActiveRecord::Base
has_many :users
around_save :contact_added_users
def contact_added_users
existing_users = self.users
yield
added_users = self.users.reject{|u| existing_users.include? u }
added_users.each { |u| u.contact }
end
end
这是一种明智的做法吗?我不确定如何将此功能用于条件回调模式。
编辑:我发现这不起作用,因为added_users
将始终为空。
更新:为了尽量减少与现有代码的冲突,我想我将避免在模型中使用回调,而是在控制器中使用around过滤器。此外,这允许我在将现有用户附加到事件对象之前查询数据库。像这样的东西(使用ActiveAdmin):
ActiveAdmin.register Event do
controller do
around_filter :contact_added_users
def contact_added_users
@event = Event.find(params[:id])
existing_users = @event.users
yield
added_users = @event.users.reject{|u| existing_users.include? u }
added_users.each { |u| u.contact }
end
end
end