Я пишу приложение Rails 3.2.6. Я хочу разделить свои контроллеры и модели на подпапки, чтобы мой код оставался чистым. Я убедился, что модель и имя ее подкаталога не совпадают. Однако я обнаружил, что код дает сбой, если имя подкаталога контроллера и имя подкаталога модели совпадают.
Следующая структура приложения работает нормально:
test
app
controllers
postcnt
posts_controller.rb
models
postmdl
post.rb
но следующая структура не делает:
test
app
controllers
postnsp
posts_controller.rb
models
postnsp
post.rb
Когда я вызываю URL:
http://localhost:3000/postnsp/posts
Я получаю ошибку 500 с сообщением:
LoadError in Postnsp::PostsController#index
Expected /Users/dev/code/test/app/models/postnsp/post.rb to define Postnsp::Post
В приведенных выше примерах я последовал совету здесь, чтобы исключить пространство имен модели: -submodul">Rails: элегантный способ структурировать модели в подпапки без создания подмодулей
и добавил
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]
в мой файл application.rb
Для второго (неудачного) примера соответствующие файлы выглядят следующим образом:
пост.рб:
class Post < ActiveRecord::Base
attr_accessible :content, :name
end
posts_controller.rb:
class Postnsp::PostsController < ApplicationController
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
маршруты.rb:
Test::Application.routes.draw do
namespace :postnsp do resources :posts end
Кто-нибудь может объяснить, почему подкаталоги не могут быть одинаковыми? Я предполагаю, что это как-то связано с созданием модуля postnsp для posts_controller.rb, но я не могу понять, почему это препятствует созданию модели. Я хотел бы иметь согласованность в именовании структуры каталогов как в папках контроллера, так и в папках модели, если мне это потребуется.
class Postnsp::Post < ActiveRecord::Base
и в файле модели .rb. (префиксPostnsp
) - person Zabba   schedule 04.07.2012