Модели с пространством имен: неинициализированная константа Member :: Album :: Image (NameError) - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть 3 модели - участник, альбом и изображение.

Файл member.rb находится в каталоге / app / models:

class Member < ActiveRecord::Base

has_many :albums

Файл album.rb находится в каталоге / app / models / member:

class Member::Album < ActiveRecord::Base

has_many :images

Файл image.rb находится в каталоге / app / models / member / album:

class Member::Album::Image < ActiveRecord::Base

В моем файле rout.rb у меня есть:

resources :members do

    resources :albums, :controller => 'members/albums' do

        resources :images, :controller => 'members/albums/images',:only => [:new, :create, :destroy] do
            get :edit, :on => :collection
            put :update, :on => :collection
        end
    end
end

Но когда я пытаюсь загрузить '/ members / 1 / album' (и несколько других мест), я получаю ошибку неинициализированной константы Member :: Album :: Image.

Я даже пытался добавить:

config.autoload_paths += %W(#{config.root}/app/models/member/album)

и

config.autoload_paths += Dir["#{config.root}/app/models/**/"]

в мой файл config / application.rb (и перезапустил сервер), чтобы убедиться, что все мои файлы, вложенные в подкаталоги в папке 'app / models', загружаются, но я все еще получаю эту ошибку.

1 Ответ

0 голосов
/ 27 февраля 2011

То, что вы делаете, на самом деле не использует пространства имен в контроллерах / моделях. Это просто вложенный маршрут. Вы заставляете Rails использовать ваши контроллеры пространства имен в ваших маршрутах. Вместо этого просто используйте:

resources :members do
  resources :albums do
    resources :images, :only => [:new, :create, :destroy] do
      get :edit, :on => :collection
      put :update, :on => :collection
    end
  end
end

Тогда вам вообще не нужно беспокоиться о пространствах имен в ваших контроллерах или моделях.

Примечание : рекомендуется не вкладывать маршруты глубиной более 2. Сейчас у вас 3, и вы получаете довольно грубые URL-адреса, такие как http://example.com/members/42/albums/100/images/new.

...