我正在编写一个Rails 3.2.6应用程序。我想分开我的控制器和模型到子文件夹,以保持我的代码清洁。我已确保模型及其子目录名称不相同。但是,如果控制器子目录名称和模型子目录名称相同,则会发现代码失败。Rails 3控制器和模型子文件夹
下面的应用程序结构正常工作:
test
app
controllers
postcnt
posts_controller.rb
models
postmdl
post.rb
但下面的结构不会:
test
app
controllers
postnsp
posts_controller.rb
models
postnsp
post.rb
当我打电话的网址:
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: Elegant way to structure models into subfolders without creating submodules
,并添加
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**}')]
我application.rb中文件
对于第二(失败的)例如相关文件如下:
post.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
的routes.rb:
Test::Application.routes.draw do
namespace :postnsp do resources :posts end
任何人都可以解释为什么子目录不能是一样的吗?我认为这与post_controller.rb的postnsp模块的创建有关,但我不明白为什么它阻止了模型的创建。我希望在控制器和模型文件夹中的目录结构命名方面保持一致,如果我需要的话。
我认为它应该是'class Postnsp :: Post
Zabba
请参阅我对以下Draiken的回应。上面的两个例子都没有名称空间模型 - 其中一个是有效的,一个没有。我不想改变模型,而是想知道轨道设计中阻碍第二个变体的工作方式。 – benmac
可能是由于自动加载在Ruby中的工作原理。这可能是您与“铁轨方式”战斗的领域之一(好或坏,没有评论!)。但为什么你想分开目录?除了“干净的感觉”之外,你还有什么成就? (“我确保模型和它的子目录名称是不一样的。”=>你已经与rails竞争过一次,期望更多!) – Zabba