我有一个引擎,有这个路由文件:
Rails.application.routes.draw do
resources :comments, :controller => 'opinio/comments'
end
当我运行rake routes
任务时,我得到正确的输出
comments GET /comments(.:format) {:action=>"index", :controller=>"opinio/comments"}
POST /comments(.:format) {:action=>"create", :controller=>"opinio/comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"opinio/comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"opinio/comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"opinio/comments"}
PUT /comments/:id(.:format) {:action=>"update", :controller=>"opinio/comments"}
DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"opinio/comments"}
我的控制器非常简单:
class Opinio::CommentsController < ApplicationController
include Opinio::Controllers::InternalHelpers
def index
resource.comments.page(params[:page])
end
def create
@comment = resource.comments.build(params[:comment])
@comment.user = current_user
if @comment.save
flash[:notice] = I18n.translate('opinio.comment.sent', :default => "Comment sent successfully.")
else
flash[:error] = I18n.translate('opinio.comment.error', :default => "Error sending the comment.")
end
end
end
但是当我尝试使用任何进入引擎控制器的操作时,我收到以下错误:
uninitialized constant Comment::CommentsController
我真诚地不知道Rails在控制器上神奇地添加了这个Comment
命名空间,并且我不知道如何解决这个问题。
答案 0 :(得分:2)
基本上,我将其添加到我的引擎模块中:
mattr_accessor :name
@@name = "Comment"
在内部,每个模块上都有一个方法name
,我意外地覆盖了该方法,并导致所有错误。 AS试图加载缺失的常量,但在我的Opinio模型中调用name
时,它得到"Comment"
而不是Opinio
。
提醒自己和那里的任何其他人。 不要使用明显的名称和属性,而不检查它们是否已经存在。