2009-12-01 4 views
1

Я пытаюсь переопределить действие в контроллере, определенном Rails Engine.Должен ли я потребовать оригинальный файл при переопределении контроллера из Rails Engine?

Похоже, мне нужно требовать оригинальный файл до открытия класса, например, так:

require File.join(RAILS_ROOT, 'vendor/plugins/myplugin/app/controllers/some_controller') 
class SomeController 

    def index 
    render :text => 'this is my index' 
    end 
end 

Это имеет смысл, но это требует довольно некрасиво. Есть ли какая-то магия Rails, которая позволила бы мне избежать первоначального требования?

+0

Вы можете сделать это автоматически путем изменения 'ActiveSupport # require_or_load' см http://stackoverflow.com/questions/5045068/extending-controllers-of- а-рельсы-3-двигатель-в-главного-приложения – Andrei

ответ

1

Это полный догадка ...

Кажется больше проблемы синхронизации нагрузки. Как и в, ваш файл загружается перед подключаемым модулем. Где находится ваше действие? Config/инициализаторы? Lib?

Я не уверен, когда Rails Engins загружается, поэтому поиграйте с местоположением (должно работать, поместив его в lib).

Или, еще лучше, создайте свой собственный плагин с изменениями и убедитесь, что он загружается после оригинала.

И вы, вероятно, хотите что-то подобное:

SomeController.class_eval do 

    def index 
    ... 
    end 

end