Проблема двигателя Rails 3 с маршрутами - PullRequest
1 голос
/ 06 апреля 2011

У меня есть движок с этим файлом маршрутов:

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 Пространство имен на контроллере, и я понятия не имею, как это решить.

1 Ответ

2 голосов
/ 06 апреля 2011

Ничего себе, это заслуживает ответа, так что никто никогда не делал такую ​​глупость, как я.

По сути, я добавил это в модуль моего двигателя:

mattr_accessor :name
@@name = "Comment"

и внутренне, уже естьметод name на каждом модуле, который я случайно переопределил, и вызывает все ошибки.AS пытался загрузить отсутствующую константу, но при запросе name внутри моей модели Opinio он получил "Comment" вместо Opinio.

Напоминание для себя и всех остальных.Не используйте очевидные имена и атрибуты, не проверив, существуют ли они в первую очередь.

...