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ファイルに
2 番目の (失敗した) 例では、関連するファイルは次のとおりです。
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
ルート.rb:
Test::Application.routes.draw do
namespace :postnsp do resources :posts end
サブディレクトリが同じにならない理由を誰か説明できますか? posts_controller.rb の postnsp モジュールの作成と関係があると思いますが、モデルの作成を妨げている理由がわかりません。必要に応じて、コントローラー フォルダーとモデル フォルダーの両方で、ディレクトリ構造の名前付けに一貫性を持たせたいと考えています。