Skip to content

Commit c4d157a

Browse files
committed
option to disable scopes that ActiveRecord.enum generates by default
1 parent 609c58b commit c4d157a

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

activerecord/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Allow disabling scopes generated by `ActiveRecord.enum`.
2+
3+
*Alfred Dominic*
4+
15
* Ensure that `delete_all` on collection proxy returns affected count.
26

37
*Ryuta Kamizono*

activerecord/lib/active_record/enum.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ def enum(definitions)
149149
klass = self
150150
enum_prefix = definitions.delete(:_prefix)
151151
enum_suffix = definitions.delete(:_suffix)
152+
enum_scopes = definitions.delete(:_scopes)
152153
definitions.each do |name, values|
153154
assert_valid_enum_definition_values(values)
154155
# statuses = { }
@@ -195,8 +196,10 @@ def enum(definitions)
195196
define_method("#{value_method_name}!") { update!(attr => value) }
196197

197198
# scope :active, -> { where(status: 0) }
198-
klass.send(:detect_enum_conflict!, name, value_method_name, true)
199-
klass.scope value_method_name, -> { where(attr => value) }
199+
if enum_scopes != false
200+
klass.send(:detect_enum_conflict!, name, value_method_name, true)
201+
klass.scope value_method_name, -> { where(attr => value) }
202+
end
200203
end
201204
end
202205
enum_values.freeze

activerecord/test/cases/enum_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,4 +551,13 @@ def self.name; "Book"; end
551551
test "data type of Enum type" do
552552
assert_equal :integer, Book.type_for_attribute("status").type
553553
end
554+
555+
test "scopes can be disabled" do
556+
klass = Class.new(ActiveRecord::Base) do
557+
self.table_name = "books"
558+
enum status: [:proposed, :written], _scopes: false
559+
end
560+
561+
assert_raises(NoMethodError) { klass.proposed }
562+
end
554563
end

0 commit comments

Comments
 (0)