0

我正在创建一个应用程序,允许用户对创建的项目发布发表评论。我按照这个Railscast设置了多态关联。

根据教程,控制器中的索引页面设置如下,将您带到 localhost:3000/projects/1/comments。

问题:我如何路由它并调整控制器中的 def 索引,以便我可以将索引路由到 localhost:3000/comments,因为我想创建一个列出所有评论的视图,而不管它发布在哪个项目上?因为现在,根据下面的路由和代码,当我转到 localhost:3000/comments 时,我收到以下错误:

ActiveRecord::RecordNotFound in CommentsController#index
Couldn't find Comment without an ID
app/controllers/comments_controller.rb:32:in `load_commentable'

/app/controllers/comments_controller.rb

class CommentsController < ApplicationController

before_filter :load_commentable
    def index
        @comments = @commentable.comments
    end

private
    def load_commentable
        resource, id = request.path.split('/')[1,2]
        @commentable = resource.singularize.classify.constantize.find(id)
    end
end

路线.rb

resources :projects do
    resources :comments
end

resources :comments
4

3 回答 3

0

设置您的 routes.rb 文件,如下所示:

resources :projects do
  resources :comments
end

resources :comments
于 2013-04-25T00:35:47.140 回答
0

如果您将index操作路由到 localhost:3000/comments,听起来您正在使用命名路由(即“comments”而不是“index”)。如果您使用的是命名路由,您是否在routes.rb文件中指定了要执行的控制器操作?例如,你应该有:

match 'comments' => 'comments#index'

并且您的视图文件的标题应为index.html.erb.

此外,如果您要嵌套评论资源,您仍然需要声明

resources :comments, only: :index                     # not nested

为您的工作路线。

于 2013-04-25T01:34:46.380 回答
0

为了解决这个问题,我创建了一个新的控制器页面:

路由.rb

match 'comments' => 'comments#admin'

评论控制器.rb

def admin
    @newcomments = Newcomment.newest.page(params[:page]).per_page(10)
end
于 2013-05-02T22:36:36.767 回答