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