Mam model o nazwie Organization
. Jest ona definiowana w app/models/organization.rb
Rails Niepowitanie stałej NameError (kolizja modelu i przestrzeni nazw)
class Organization < ActiveRecord::Base
... code
end
Mam kontroler o nazwie Admin::Organization::ActivitiesController
. Jest zdefiniowany w app/controllers/admin/organization/activities_controller.rb
. Ma w sobie akcję indeksowania.
class Admin::Organization::ActivitiesController < ApplicationController
def index
@organization = Organization.new
... more code
end
end
pojawia się następujący komunikat kiedy wykonać powyższą akcję index:
NameError in Admin::Organization::ActivitiesController#index
uninitialized constant Admin::Organization::ActivitiesController::Organization
Z jakiegoś powodu to SCOPINGU model organizacyjny wewnątrz klasy kontrolera. Jeśli zmienię metodę , aby można było używać tej metody, to można ją poprawnie.
To zachowanie nie pojawia się w konsoli podrzędnej. Jeśli dodam wywołanie binding.pry
w metodzie indeksu, mogę wywołać Organization.new
lub ::Organization.new
z wiersza poleceń, który działa poprawnie.
Każdy inny model w aplikacji działa poprawnie i nie ma tego dziwnego zachowania. Nie napisałem oryginalnego kodu, więc staram się rozgryźć, co się dzieje.
Myślę, że może to mieć coś wspólnego z przestrzenią nazw w pliku routes.rb. Istnieje przestrzeń nazw korzystająca ze słowa organization
.
namespace :admin do
namespace :organization
resources :activities
end
end
Jako test, zmieniłem nazw do :organizations
, i udało mi się dostać rzeczy do pracy bez konieczności ::
. Czy istnieje sposób na uporządkowanie rzeczy lub ustawienie routingu, abyśmy mogli mieć przestrzeń nazw :organization
, która nie koliduje z modelem o nazwie Organization
?
Właśnie w celu wyjaśnienia, kiedy mówisz "przerwy kod", to znaczy, że widać, że błąd podczas próby uruchomienia aplikacji lub wywołania metody 'ActivityController # index'? – seddy
Pęknie, gdy zostanie wykonane działanie 'ActivityController # index'. Zaktualizowałem pytanie. – CodeSmith