代码之家  ›  专栏  ›  技术社区  ›  spl

多态关联-如何创建主索引页面

  •  0
  • spl  · 技术社区  · 11 年前

    我正在创建一个应用程序,允许用户对创建的项目帖子发表评论。我遵循了这个 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
    
    3 回复  |  直到 11 年前
        1
  •  0
  •   Tomanow    11 年前

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

    resources :projects do
      resources :comments
    end
    
    resources :comments
    
        2
  •  0
  •   aceofbassgreg    11 年前

    如果您正在路由 index 对localhost:3000/comments的操作,听起来像是在使用命名路由(即“comments”而不是“index”)。如果您使用的是命名路线,您是否在 routes.rb 文件要命中哪个控制器操作?例如,您应该具备:

    match 'comments' => 'comments#index'
    

    并且您的视图文件应该具有标题 index.html.erb .

    此外,如果您正在嵌套注释资源,您仍然需要声明

    resources :comments, only: :index                     # not nested
    

    为你的上班路线。

        3
  •  0
  •   spl    11 年前

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

    路线.rb

    match 'comments' => 'comments#admin'
    

    注释_控制器.rb

    def admin
        @newcomments = Newcomment.newest.page(params[:page]).per_page(10)
    end