module BaseModel extend ActiveSupport::Concern included do scope :recent, -> { order(id: :desc) } scope :exclude_ids, -> (ids) { where.not(id: ids.map(&:to_i)) } scope :by_ids, -> (ids) { where(id: ids) unless ids.blank? } scope :by_week, -> { where("created_at > ?", 7.days.ago.utc) } delegate :url_helpers, to: 'Rails.application.routes' end # FIXME: 需要原子化操作 def push(hash) hash.each_key do |key| self.send("#{key}_will_change!") old_val = self[key] || [] old_val << hash[key].to_i old_val.uniq! update_attributes(key => old_val) end end # FIXME: 需要原子化操作 def pull(hash) hash.each_key do |key| self.send("#{key}_will_change!") old_val = self[key] return true if old_val.blank? old_val.delete(hash[key].to_i) update_attributes(key => old_val) end end end