2014-12-16 2 views
1

Я играю с созданием простой плагиновой системы для своего приложения. В настоящее время я не могу расширять свои модели activerecord изнутри файлов движка.Расширение классов рельсов от двигателей

Скажем, у меня есть следующие модели:

# /my_app/app/models/post.rb 
class Post < ActiveRecord::Base 
end 

Что я хочу добиться того, чтобы иметь возможность поместить файл, например, /my_app/example_engine/app/example_engine/models/post.rb который добавит некоторые методы к моему Post класса. Я пытался сделать это, помещая следующее содержимое этого файла:

# /my_app/example_engine/app/example_engine/models/post.rb 
Post.class_eval do 
    def new_method 
    "hello" 
    end 
end 

Но мне кажется, что это не правильный способ сделать это дело, это не работает. Мне, вероятно, не хватает элементарных знаний о классах рубинов или о том, как работают рельсы, поэтому я был бы очень благодарен, если бы кто-нибудь мог мне помочь в этом.

Заранее благодарен!

+0

Нужно ли поддерживать базовый класс в отличие от простого подкласса? –

ответ

0

Если вы нормально с подклассов, я бы рекомендовал делать следующее

ли ваш двигатель расширить базовый класс под пространством имен, таких как

module MyEngine 
     class Post < Post 
     ..... 
     end 
    end 

Нет необходимости Eval, только наследовать от основания класса и расширять его по мере необходимости.

+0

На самом деле я просто пытаюсь заставить его работать, используя любое возможное решение :). Что-то не так с сохранением базового класса вместо подкласса? – mbajur

+0

О, и что более важно - для меня очень важно не трогать приложение root. Все, что я хочу сделать, это включить движок в Gemfile. Больше ничего. – mbajur

+0

Я бы избегал использования класса eval или eval вообще, если можно. В вашем случае я переписал то, что ответил, так как ответил в противоположном смысле вашего вопроса. –

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