Project

General

Profile

Actions

Refactor #5714

open

Remove method definitions from included block when using Concern

Added by Petr Chalupa over 10 years ago. Updated over 10 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
Rails
Target version:
-
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

Hi fellow Rubyists,

I saw methods defined directly in included block when using Concern several times.

module AModule
  extend ActiveSupport::Concern

  included do
   # this is BAD
   def a_method
    end
  end
end

It is a bad practice and it breaks things, all instance methods should go to the AModule, and all class methods to a ClassMethods module.

- It dynamically creates methods in each class, they are not shared through module, it is slow.
- It cannot be accessed for extension, there is no module to include to.
- it breaks `super` calls.

We should avoid using this and go for:

module AModule
  extend ActiveSupport::Concern

  included do
    # e.g.
    has_one :user
  end

  module ClassMethods
    def a_method
    end
  end
end

Thanks.

I'll create issue to remove these bad definitions.

Petr


Related issues 1 (0 open1 closed)

Copied from Katello - Refactor #5713: Remove method definitions from included block when using ConcernClosedPetr Chalupa05/14/2014Actions
Actions

Also available in: Atom PDF