2013-10-11 2 views
2

Я хочу иметь возможность динамически создавать классы для сценариев вне моего приложения Rails, которые наследуются от ActiveRecord.Динамически создавать класс, унаследованный от ActiveRecord?

Я застрял на что-то вроде этого:

require 'active_record' 

def create_arec(table_name) 
    Class.new ActiveRecord::Base do 
    self.table_name = table_name 
    yield 
    end 
end 

Band = create_arec 'bands' do 
    scope :only_rock, -> {where genre: 'rock'} 
end 

rock_bands = Band.only_rock #undefined method `only_rock' 

Как заставить его работать, или кто-то может показать мне лучший способ сделать это?

+2

чувак! серьезно? Зачем? и если! просто используйте 'class_eval'. вы будете убиты кем-то, если они будут поддерживать это! я говорю вам, не шучу! – phoet

+0

Возможно, мне было любопытно, если вы можете уступить этот блок внутри блока для Class.new, а затем на самом деле использовать его. Во всяком случае, да, спасибо, class_eval будет намного лучше. Мне нравится рубин. –

+0

напишите ответ на свой вопрос и отметьте его разрешенным, чтобы людям больше не приходило в глаза. – phoet

ответ

2

пригвоздил:

def create_arec(table_name, &block) 
    klass = Class.new(ActiveRecord::Base){self.table_name = table_name} 
    klass.class_eval &block 
    klass 
end 

благодаря @phoet

Смежные вопросы