Class: RuboCop::Cop::Appdev::ExplicitAssociationOptions
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Appdev::ExplicitAssociationOptions
- Defined in:
- lib/rubocop/cop/appdev/explicit_association_options.rb
Overview
Requires explicit options on ActiveRecord associations so students see the column and class being wired up, rather than relying on Rails' pluralization magic.
belongs_to,has_one,has_many(without:through) must pass:class_nameand:foreign_key.has_many :throughandhas_one :throughmust pass:class_name,:source, and:through.has_and_belongs_to_manyis banned entirely; usehas_many :throughinstead.
Constant Summary collapse
- MSG_ONE_TO_N =
"`%<method>s(:%<name>s, ...)` requires `:class_name` and `:foreign_key`."- MSG_THROUGH =
"`%<method>s :through` requires `:class_name`, `:source`, and `:through`."- MSG_HABTM =
"`has_and_belongs_to_many` is not taught; use `has_many :through` instead."- RESTRICT_ON_SEND =
[ :belongs_to, :has_one, :has_many, :has_and_belongs_to_many ].freeze
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/rubocop/cop/appdev/explicit_association_options.rb', line 38 def on_send(node) return if node.receiver return unless inside_class_or_module?(node) case node.method_name when :has_and_belongs_to_many add_offense(node, message: MSG_HABTM) else check_association(node) end end |