1
私はいくつかの標準的な方法を含めるコントローラを持っています。Rails 3コントローラの内部にネストされたモジュールを含める
class Main::UsersController < Main::BaseController
include MyModule::ControllerMethods
end
uninitialized constanct MyModule::ClassMethods::InstanceMethods
私のモジュールも間違っている、このようになり、もともとモデルのためのものでした。コントローラーでも使えるようにするには、どうすればいいですか?
module MyModule
def self.included(base)
base.has_one :example, :autosave => true
base.before_create :make_awesome
base.extend ClassMethods
end
module ClassMethods
...
include InstanceMethods
end
module InstanceMethods
...
end
module ControllerMethods
...
# I want to include these in my controller
def hello; end
def world; end
end
end
イェフダカッツによるこの記事では、単に拡張使用して上書きするよりも優れている理由について、より詳細にに行きます以下を拡張してください:http://yehudakatz.com/2009/11/12/better-ruby-idioms/ – jergason
ちょうど不思議なことに、あなたは 'Base.extend MyModule :: ModelMethods'を入れますが、' Base'はそれに関係しています。それは 'ActiveRecord :: Base'でしょうか? – Dex
私は 'Base'を使って単純にしておくと思っていましたが、おそらくもっと混乱します。 ActiveRecord :: Baseを使用する答えを変更しました。 –