我有几个模型有共同的担忧。每个模型都传入一个哈希,这是为了处理它们使用关注点的方式上的微小差异。我通过一个类方法传递哈希,如下所示:
add_update_to :group, :user
关注的完整代码是:
module Updateable
extend ActiveSupport::Concern
attr_accessor :streams
module ClassMethods
def add_updates_to(*streams)
@streams = streams
end
end
module InstanceMethods
def update_streams
@streams.collect{|stream| self.public_send(stream)}
end
end
included do
has_one :update, :as => :updatable
after_create :create_update_and_history
end
private
def create_update_and_history
update = self.create_update(:user_id => User.current.id)
self.update_streams.each do |stream|
stream.histories.create(:update_id => update.id)
end
end
end
大部分代码都有效,但我无法将哈希从类传递到实例。目前,我试图通过创建一个虚拟属性,将哈希传递给属性,然后在实例中检索它来实现这种效果。这不仅感觉很hacky,而且不起作用。我假设它不起作用,因为它@streams
是一个实例变量,所以类方法add_update_to
实际上不能设置它?
无论如何,有没有更好的方法来解决这个问题?