我正在创建一个应用程序,允许用户对创建的项目发布进行评论。我按照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
的routes.rb
resources :projects do
resources :comments
end
resources :comments
答案 0 :(得分:0)
设置routes.rb文件,例如:
resources :projects do
resources :comments
end
resources :comments
答案 1 :(得分:0)
如果您将index
操作路由到localhost:3000 / comments,则听起来您使用的是命名路由(即'comments'而不是'index')。如果您使用的是命名路由,是否在routes.rb
文件中指定了哪个控制器操作?例如,您应该:
match 'comments' => 'comments#index'
并且您的视图文件的标题应为index.html.erb
。
此外,如果您正在嵌套评论资源,则仍需要声明
resources :comments, only: :index # not nested
为您的工作路线。
答案 2 :(得分:0)
为了解决这个问题,我创建了一个新的控制器页面:
route.rb
match 'comments' => 'comments#admin'
comments_controller.rb
def admin
@newcomments = Newcomment.newest.page(params[:page]).per_page(10)
end