diff options
Diffstat (limited to 'activerecord/lib')
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 283eb1070a..a74f8ce471 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -787,7 +787,7 @@ module ActiveRecord #:nodoc: attributes.each { |attr_name| super unless column_methods_hash[attr_name.intern] } attr_index = -1 - conditions = attributes.collect { |attr_name| attr_index += 1; "#{attr_name} #{arguments[attr_index].nil? ? "IS" : "="} ? " }.join(" AND ") + conditions = attributes.collect { |attr_name| attr_index += 1; "#{attr_name} #{attribute_condition(arguments[attr_index])} " }.join(" AND ") if arguments[attributes.length].is_a?(Hash) find(finder, { :conditions => [conditions, *arguments[0...attributes.length]]}.merge(arguments[attributes.length])) @@ -800,6 +800,14 @@ module ActiveRecord #:nodoc: end end + def attribute_condition(argument) + case argument + when nil then "IS ?" + when Array then "IN (?)" + else "= ?" + end + end + # Defines an "attribute" method (like #inheritance_column or # #table_name). A new (class) method will be created with the # given name. If a value is specified, the new method will |