Ich habe einen Controller, den ich einige Standardmethoden einschließen möchte.Schienen 3 Einschließlich verschachtelte Module im Controller
class Main::UsersController < Main::BaseController
include MyModule::ControllerMethods
end
uninitialized constanct MyModule::ClassMethods::InstanceMethods
sieht mein Modul wie diese, die auch falsch ist, und wurde für ein Modell ursprünglich gedacht. Was ist der beste Weg dies zu tun, damit ich es auch mit einem Controller benutzen kann?
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
Dieser Artikel von Yehuda Katz in mehr Detail geht, warum nur verlängern mit besser als zwingende enthalten, um zu erweitern: http://yehudakatz.com/2009/11/12/better-ruby-idioms/ – jergason
Nur neugierig, Sie setzen 'Base.extend MyModule :: ModelMethods', aber was" Base "betrifft. Sollte es "ActiveRecord :: Base" sein? – Dex
Ich dachte, ich würde es mit 'Base' einfach halten, aber es ist wahrscheinlich verwirrender. Ich habe die Antwort geändert, um 'ActiveRecord :: Base' zu verwenden –