我正在编写一个 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
在上面的示例中,我遵循此处的建议来消除模型命名空间: Rails:将模型构建到子文件夹中而不创建子模块的优雅方式
并添加
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]
到我的 application.rb 文件
对于第二个(失败)示例,相关文件如下:
post.rb:
class Post < ActiveRecord::Base
attr_accessible :content, :name
end
post_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
谁能解释为什么子目录不能相同?我认为这与为 posts_controller.rb 创建 postnsp 模块有关,但我不明白为什么它会阻止创建模型。如果需要,我希望控制器和模型文件夹中的目录结构命名保持一致。