aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/lib/active_record/enum.rb2
-rw-r--r--activerecord/test/cases/enum_test.rb11
-rw-r--r--activerecord/test/schema/schema.rb4
3 files changed, 15 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb
index 1d484f7c15..aebb061717 100644
--- a/activerecord/lib/active_record/enum.rb
+++ b/activerecord/lib/active_record/enum.rb
@@ -67,7 +67,7 @@ module ActiveRecord
_enum_methods_module.module_eval do
# def status=(value) self[:status] = STATUS[value] end
define_method("#{name}=") { |value|
- unless enum_values.has_key?(value) || value.blank?
+ unless enum_values.has_key?(value) || enum_values.has_value?(value) || value.blank?
raise ArgumentError, "'#{value}' is not a valid #{name}"
end
self[name] = enum_values[value]
diff --git a/activerecord/test/cases/enum_test.rb b/activerecord/test/cases/enum_test.rb
index 017edcb194..47e3dfc3ad 100644
--- a/activerecord/test/cases/enum_test.rb
+++ b/activerecord/test/cases/enum_test.rb
@@ -16,7 +16,7 @@ class EnumTest < ActiveRecord::TestCase
assert @book.unread?
end
- test "query state with symbol" do
+ test "query state with strings" do
assert_equal "proposed", @book.status
assert_equal "unread", @book.read_status
end
@@ -78,4 +78,13 @@ class EnumTest < ActiveRecord::TestCase
assert_equal 1, Book::STATUS["written"]
assert_equal 2, Book::STATUS[:published]
end
+
+ test "first_or_initialize with enums' scopes" do
+ class Issue < ActiveRecord::Base
+ enum status: [:open, :closed]
+ end
+
+ assert Issue.open.empty?
+ assert Issue.open.first_or_initialize
+ end
end
diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb
index ac546fc296..9f504801af 100644
--- a/activerecord/test/schema/schema.rb
+++ b/activerecord/test/schema/schema.rb
@@ -327,6 +327,10 @@ ActiveRecord::Schema.define do
t.string :color
end
+ create_table :issues, force: true do |t|
+ t.integer :status
+ end
+
create_table :items, force: true do |t|
t.column :name, :string
end