2012-04-11 20 views
2

RailsアプリケーションでモデルとコントローラをEngineから再度開き、エンジンからコントローラを拡張したいと考えています。問題は、アプリケーションの起動時に読み込まれないということです。私はそこにはRails engines extending functionalityhow to override rails 3 engine models and controllers in the main application?のようないくつかの解決策があることを知っていますが、これはレールのロードシーケンスによるものと思われます。Rails 3.xアプリケーションのエンジンからモデルとコントローラを再オープン

は、それから私は、このソリューションに出くわす:レールで

しかし、エンジン内のモデルとコントローラがロードされている
config.railties_order = [Blog::Engine, :main_app, :all] 

ではなく、ものを。 誰かが前にこの作品を作ったのかどうか疑問に思っていますか?

+0

を参照してください。クリーンな解決策[懸念を使用して] [1]。 [1]:http://stackoverflow.com/questions/11675951/testing-model-extensions-for-engines –

答えて

0

メインのRailsアプリケーションコントローラにRailsエンジンを継承させることで、コントローラクラスを再度開くことができます。これは、この戦略はモデルのために働いていない、いくつかの理由から、

#/app/controllers/answer_sheets_controller.rb 
require YourCustomEngine::Engine.root.join('app', 'controllers', 'your_custom_engine', 'answer_sheets_controller') 

class AnswerSheetsController < YourCustomEngine::AnswerSheetsController 

、コントローラの作業を取得するためにconfig.railties_orderを必要としませんでした。

+0

これは悲しいことです。しかし私は別の解決策を思いつきました、下記を参照してください。かなりきれいではない(コメントにコードを入れる方法がわからない) –

+0

@TinmanChan - 別の解決策があります。 https://groups.google.com/forum/?fromgroups#!topic/rubyonrails-core/jy2dQ0BQhnM – westonplatter

0

マイソリューション:

# === in engine 
class EngineNameSpace::Blog 
    # logic goes here 
end 

class Blog < EngineNameSpace::Blog 
    # no codes should go here 
end 

# === in app 
# If I need to extend the Blog class, I will code as below instead of reopenning the class 
class Blog < EngineNameSpace::Blog 
    # do something 
end 

説明:

Railsのブロックロードからエンジンクラスを、彼らは親アプリで何かと同じファイル名/パスであれば、ここでhttp://www.cowboycoded.com/2011/02/06/making-the-case-for-rails-3-engines/

関連する問題