magic_attribute.rb 742 Bytes
# Always work through the interface MagicAttribute.value
class MagicAttribute < ActiveRecord::Base
  belongs_to :magic_field
  belongs_to :magic_option

  before_save :update_magic
  
  def to_s
    (magic_option) ? magic_option.value : value
  end
  
  def update_magic
    if option = find_magic_option_for(value)
      unless magic_option and magic_option == option
        self.value = nil
        self.magic_option = option
      end
    elsif magic_field.allow_other
      self.magic_option = nil
    end
  end
  
private

  def find_magic_option_for(value)
    magic_field.magic_options.find(:first,
      :conditions => ["value = ? or synonym = ?", value, value]) unless magic_field.nil? or magic_field.magic_options.blank?
  end
end