我正在編寫一個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