# File lib/file_column.rb, line 546
    def file_column(attr, options={})
      options = DEFAULT_OPTIONS.merge(options) if options
      
      my_options = FileColumn::init_options(options, 
                                            Inflector.underscore(self.name).to_s,
                                            attr.to_s)
      
      state_attr = "@#{attr}_state".to_sym
      state_method = "#{attr}_state".to_sym
      
      define_method state_method do
        result = instance_variable_get state_attr
        if result.nil?
          result = FileColumn::create_state(my_options, self, attr.to_s)
          instance_variable_set state_attr, result
        end
        result
      end
      
      private state_method
      
      define_method attr do |*args|
        send(state_method).absolute_path *args
      end
      
      define_method "#{attr}_relative_path" do |*args|
        send(state_method).relative_path *args
      end

      define_method "#{attr}_dir" do
        send(state_method).absolute_dir
      end

      define_method "#{attr}_relative_dir" do
        send(state_method).relative_dir
      end

      define_method "#{attr}=" do |file|
        instance_variable_set state_attr, send(state_method).assign(file)
        if my_options[:after_assign]
          my_options[:after_assign].each do |sym|
            self.send sym
          end
        end
      end
      
      define_method "#{attr}_temp" do
        send(state_method).temp_path
      end
      
      define_method "#{attr}_temp=" do |temp_path|
        instance_variable_set state_attr, send(state_method).assign_temp(temp_path)
      end
      
      after_save_method = "#{attr}_after_save".to_sym
      
      define_method after_save_method do
        instance_variable_set state_attr, send(state_method).after_save
      end
      
      after_save after_save_method
      
      after_destroy_method = "#{attr}_after_destroy".to_sym
      
      define_method after_destroy_method do
        send(state_method).after_destroy
      end
      after_destroy after_destroy_method
      
      define_method "#{attr}_just_uploaded?" do
        send(state_method).just_uploaded?
      end
      
      define_method "#{attr}_options" do
        send(state_method).options
      end
      
      private after_save_method, after_destroy_method

      FileColumn::Magick::file_column(self, attr, my_options) if options[:magick]
    end