23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/lookup_by/lookup.rb', line 23
def lookup_by(field, options = {})
begin
return unless table_exists?
rescue => error
Rails.logger.error "lookup_by caught #{error.class.name} when connecting - skipping initialization (#{error.inspect})"
return
end
options.symbolize_keys!
options.assert_valid_keys :allow_blank, :order, :cache, :normalize, :find, :find_or_create, :raise, :safe
raise "#{self} already called lookup_by" if is_a? Lookup::ClassMethods
raise "#{self} responds_to .[], needed for lookup_by" if respond_to? :[]
raise "#{self} responds_to .lookup, needed for lookup_by" if respond_to? :lookup
extend ClassMethods
class_eval do
include InstanceMethods
singleton_class.class_eval do
attr_reader :lookup
end
lookup_by_disable :destroy, :destroy_all, :delete, :delete_all
unless field == :name || column_names.include?("name")
alias_attribute :name, field
attr_accessible :name if respond_to?(:accessible_attributes) && accessible_attributes.include?(field)
end
@lookup = Cache.new(self, options.merge(field: field))
@lookup.reload
end
LookupBy.register self
end
|