Ich habe ein Modell mit dem Namen Organization
. Es wird definiert, in app/models/organization.rb
Rails NameError nicht initialisierte Konstante (Model und Namespace Collision)
class Organization < ActiveRecord::Base
... code
end
Ich habe einen Controller namens Admin::Organization::ActivitiesController
. Es ist definiert in app/controllers/admin/organization/activities_controller.rb
. Es hat eine Indexaktion darin.
class Admin::Organization::ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end
bekomme ich folgende Meldung, wenn ich die oben Index Aktion ausführen:
NameError in Admin::Organization::ActivitiesController#index
uninitialized constant Admin::Organization::ActivitiesController::Organization
Aus irgendeinem Grund es Scoping das Organisationsmodell innerhalb der Controller-Klasse. Wenn ich die index
Methode ändern
@organization = ::Organization.new
zu verwenden, dann funktioniert es gut.
Dieses Verhalten scheint nicht in einer Pry-Konsole angezeigt. Wenn ich einen binding.pry
Aufruf in der Indexmethode hinzufüge, dann kann ich Organization.new
oder ::Organization.new
von der Befehlszeile aufrufen, es funktioniert gut.
Jedes andere Modell in der App funktioniert ordnungsgemäß und hat dieses seltsame Verhalten nicht. Ich habe den Code ursprünglich nicht geschrieben, also versuche ich herauszufinden, was los ist.
Ich denke, es könnte etwas mit einem Namespace in der Datei routes.rb tun. Es gibt einen Namensraum, der das organization
Wort verwendet.
namespace :admin do
namespace :organization
resources :activities
end
end
Als Test, änderte es den Namespace :organizations
, und ich war in der Lage, Dinge zu bekommen, ohne ::
um zu arbeiten. Gibt es eine Möglichkeit, Dinge zu strukturieren, oder eine Routing-Einstellung, so dass wir einen Namensraum von :organization
haben können, der das Modell mit dem Namen Organization
nicht stört?
Nur um zu klären, wenn Sie "den Code breaks" sagen, meinen Sie Sie sehen, dass Fehler, wenn Sie versuchen, die App zu starten oder wenn Sie die Methode 'ActivitiesController # index' aufrufen? – seddy
Es bricht ab, wenn die Aktion 'ActivitiesController # index' ausgeführt wird. Ich habe die Frage aktualisiert. – CodeSmith