Oto a brand new Rails 5.1.4 app, z modelem i kilkoma trasami i kontrolerami.Automatyczne ładowanie szyny/stała rozdzielczość tworzy moduły widmowe
przestrzeni nazw kontroler odwołuje się do topowy model Level:
class AdminArea::WelcomeController < ApplicationController
def index
@user = User.new(name: 'Sergio')
end
end
tej pory tak dobrze. Możesz sprawdzić mastera, przejść do http://localhost:3000/admin_area/welcome
i zobaczyć, jak działa.
ALE jeśli mamy were to add an empty directory app/presenters/admin_area/user/
*, wtedy sprawy stają się dziwne. Nagle, User
w tym kontrolerze nie jest moim modelem, ale nieistniejącym modułem!
NoMethodError (undefined method `new' for AdminArea::User:Module):
app/controllers/admin_area/welcome_controller.rb:3:in `index'
Oczywiście ten moduł nie ma żadnych [niewbudowanych] metod i nie można go przypiąć do pliku źródłowego na dysku.
Pytanie: dlaczego dodanie pustego katalogu powoduje szyny do modułu tajemniczo wyczarować z powietrza zamiast poprawnie rozwiązać nazwę User
do mojego modelu?
* faktycznie, jeśli sprawdzeniu, że oddział jak jest, dostaniesz inny błąd.
NameError (niezainicjowany stała AdminArea :: WelcomeController :: User)
ponieważ git nie pozwolił mi popełnić pusty katalog, więc dodałem plik .keep
tam. Ale jak tylko usuniesz ten plik, otrzymasz opisane powyżej zachowanie.
Możliwy duplikat [Rails 4: organizują modeli szyn sub ścieżki bez przestrzeni nazw modeli] (https://stackoverflow.com/questions/18934115/rails-4-organize-rails-models-in-sub -path-without-namespacing-models) – jon1467
@ jon1467: nie, nie duplikat tego. Chyba że czegoś mi brakuje. –
Ach przepraszam, myślę, że błędnie przeczytałem twoje pytanie, pytając, jak umieścić swój model użytkownika w katalogu 'prezenterów'. Mój błąd. – jon1467