Ruby on rails Rails:ousave回调是否有条件地触发特定于一个属性的操作?
我的Rails应用程序包含事件和用户。如果用户被添加到事件中,无论是创建新事件还是更新现有事件,我都需要向用户发送消息。为了避免多次发送消息,我考虑采用如下设计模式:Ruby on rails Rails:ousave回调是否有条件地触发特定于一个属性的操作?,ruby-on-rails,callback,Ruby On Rails,Callback,我的Rails应用程序包含事件和用户。如果用户被添加到事件中,无论是创建新事件还是更新现有事件,我都需要向用户发送消息。为了避免多次发送消息,我考虑采用如下设计模式: class Event < ActiveRecord::Base has_many :users around_save :contact_added_users def contact_added_users existing_users = self.users yield adde
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
用户只能参加一个活动?还是更多的事件?@rmagnum2002这是一个非常简单的例子。事实上,一个用户可以参与很多活动,所以有一个参与模型。很好,我假设每次创建或编辑一个活动时,您可以一次添加多个用户?是吗?@rmagnum2002是的,没错,伊万,用ActiveModel::Dirty把这个带到用户模型上怎么样?“保存之前:使用你的魔法”和def使用你的魔法{如果事件id改变了?等等}
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