Module: PolymorphicAsTable::HasOneAssociation

Defined in:
lib/polymorphic_as_table/has_one_association.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/polymorphic_as_table/has_one_association.rb', line 3

def self.included(base)
  base.class_eval do
    def find_target
      options = @reflection.options.dup
      (options.keys - [:select, :order, :include, :readonly]).each do |key|
        options.delete key
      end
      options[:conditions] = @finder_sql

      the_target = @reflection.klass.find(:first, options)
      set_inverse_instance(the_target, @owner)
      the_target
    end
    def construct_sql
      case
      when @reflection.options[:as]
        @finder_sql =
          "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_id = #{owner_quoted_id} AND " +
          "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.base_class.table_name)}"
      else
        @finder_sql = "#{@reflection.quoted_table_name}.#{@reflection.primary_key_name} = #{owner_quoted_id}"
      end
      @finder_sql << " AND (#{conditions})" if conditions
    end
  end
end