【发布时间】:2015-06-30 17:13:43
【问题描述】:
我有一个命名空间的 Post 控制器,如下所示
class Admin::Blog::PostsController < Admin::BaseController
end
和一个命名空间模型如下。
class Blog::Post < ActiveRecord::Base
end
但是当我尝试访问后控制器的索引操作中的模型时,如下所示
def index
@posts = Blog::Post.where(:foo_id => params[:id]).paginate(:page => params[:page], :per_page => 20)
end
我收到以下错误
LoadError at /admin/blog/posts
Expected/app/models/blog/post.rb to define Post
但是当我将模型从 Blog::Post 移动到 Admin::Blog::Post 命名空间时是有效的。
我对此有点困惑,无法了解这是怎么回事。 是否要求 Controller 和 Model 必须存在于同一个命名空间中?
以下是来自 routes.rb 的 sn-p
namespace :admin do
namespace :blog do
resources :posts
resources :categories
end
end
博客模块sn-p
module Blog
def self.table_name_prefix
'blog_'
end
end
预加载控制器和模型
config.autoload_paths += Dir["#{Rails.root}/app/models/**/**"]
config.autoload_paths += Dir["#{Rails.root}/app/controllers/**/**"]
config.autoload_paths += Dir["#{config.root}/app/helpers/**/**"]
config.autoload_paths += Dir["#{config.root}/app/tags/**/**"]
config.autoload_paths += %W[ #{Rails.root}/app/extensions #{Rails.root}/app/modules #{Rails.root}/app/drops #{Rails.root}/app/filters #{Rails.root}/app/mailers ]
【问题讨论】:
-
你能从routes.rb中添加与博客文章相关的sn-p吗...
-
@VamsiKrishna 我添加了 routes.rb sn-p。
-
所以博客不是你的例子
-
是的,它不是一个模型,它只是一个带有上面显示的sn-p的模块。
-
rails 希望名称间距也反映在目录树中。这些文件在哪里?
标签: ruby-on-rails ruby