2013-12-23 3 views
7

Я хотел бы определить метод класса, используя Module # относительно (https://github.com/37signals/concerning - часть Rails 4.1). Это позволит мне перемещать модули, которые используются одним классом, обратно в класс.Могу ли я определить методы класса с модулем №?

Однако, похоже, я не могу определить методы класса. Учитывая это:

class User < ActiveRecord::Base 
    attr_accessible :name 

    concerning :Programmers do 
    module ClassMethods 
     def programmer? 
     true 
     end 
    end 
    end 

    module Managers 
    extend ActiveSupport::Concern 

    module ClassMethods 
     def manager? 
     true 
     end 
    end 
    end 

    include Managers 
end 

я ожидал бы обе эти работы:

User.manager? 
User.programmer? 

Но вторая поднимает

NoMethodError: undefined method `programmer?' for #<Class:0x007f9641beafd0> 

Как я могу определить методы класса с использованием модуля # относительно?

+0

FWIW, образец проекта: https://github.com/johnnaegle/concerning-example –

+1

https://github.com/37signals/concerning/issues/1 –

+0

Это исправлено в Rails и относительно сейчас. –

ответ

5

Попробуйте вместо этого:

concerning :Programmers do 
    included do 
    def self.programmer? 
     true 
    end 
    end 
end 
+0

Это работает, но это не так чисто, как хотелось бы - определение бесшовного модуля было действительно привлекательным. –

+0

Согласен - функция пока не полностью запечена. – Rob

2

Быстрый обходной путь:

concerning :MeaningOfLife do 
    included { extend ClassMethods } 

    module ClassMethods 
     ... 
    end 
Смежные вопросы