動的インターフェイスを作成しようとしています。モデルクラスが存在し、アプリケーションの起動時にコントローラーが動的に作成される場所。
リソースが作成されたルートファイルですべてが発生します。
ActionController::Routing::Routes.draw do |map|
map.namespace :admin do |admin|
TestAdmin.models.each do |m|
admin.resources m.to_s.tableize.to_sym
end
end
end
そして、私のBeAdminクラスがあります。これは次のことを行います。
module TestAdmin
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def beadmin(options = {})
namespace_name = "Admin"
class_name = "#{self.to_s.pluralize.capitalize}Controller"
klass = namespace_name.constantize.const_set(class_name, Class.new(ApplicationController))
klass.module_eval do
def index
render :text => "test"
end
end
end
end
def self.models
all_models = []
Dir.chdir(File.join(Rails.root, "app/models")) do
Dir["**/*.rb"].each do |m|
class_name = m.sub(/\.rb$/,"").camelize
klass = class_name.split("::").inject(Object){ |klass,part| klass.const_get(part) }
all_models << "#{class_name}" if klass < ActiveRecord::Base && !klass.abstract_class?
end
end
all_models
end
end
そして、(ユーザーモデルから)/ admin / usersを参照すると、「テスト」が表示されます。とてもうまくいきます!
しかし、その後、ブラウザーを単純に更新すると、呼び出されるコントローラーがAdmin :: UsersController#indexではなくUsersController#indexになります...彼は何らかの理由で名前空間を失います...
たぶん、ここでのもう1つの重要な側面は、プラグインとユーザーRailsエンジンとしてこれらすべてを追加したので、プラグイン可能なインターフェイスを作成できることです...
しかし、私のルートはどこかで失われているように見えるので、これまでのところ運がありません!
よろしくお願いします!
ジェレ