app/models/preference.rb in preferences-0.0.1 vs app/models/preference.rb in preferences-0.1.0

- old
+ new

@@ -8,20 +8,32 @@ # the color, and the +target+ is the Car. This allows preferences to have a sort # of context around them. class Preference < ActiveRecord::Base belongs_to :owner, :polymorphic => true - belongs_to :preferenced, + belongs_to :group, :polymorphic => true validates_presence_of :attribute, :owner_id, :owner_type - validates_presence_of :preferenced_id, - :preferenced_type, - :if => Proc.new {|p| p.preferenced_id? || p.preferenced_type?} + validates_presence_of :group_type, + :if => :group_id? + class << self + # Splits the given group into its corresponding id and type + def split_group(group = nil) + if group.is_a?(ActiveRecord::Base) + group_id, group_type = group.id, group.class.base_class.name.to_s + else + group_id, group_type = nil, group + end + + return group_id, group_type + end + end + # The definition for the attribute def definition owner_type.constantize.preference_definitions[attribute] if owner_type end @@ -29,6 +41,12 @@ def value value = read_attribute(:value) value = definition.type_cast(value) if definition value end + + # Only searches for the group record if the group id is specified + def group_with_optional_lookup + group_id ? group_without_optional_lookup : group_type + end + alias_method_chain :group, :optional_lookup end