0

作成したプロジェクトの投稿にユーザーがコメントできるアプリケーションを作成しています。このRailscastに従って、ポリモーフィックな関連付けを設定しました。

チュートリアルに基づいて、コントローラーのインデックス ページが以下のように設定され、localhost:3000/projects/1/comments に移動します。

質問: どのプロジェクトに投稿されたかに関係なく、すべてのコメントをリストするビューを作成したいので、代わりにインデックスを localhost:3000/comments にルーティングできるように、コントローラーでそれをルーティングして def インデックスを調整するにはどうすればよいですか? 現在、以下のルートとコードに基づいて、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

アクションを localhost:3000/comments にルーティングしている場合index、名前付きルート (つまり、'index' ではなく 'comments') を使用しているように聞こえます。名前付きルートを使用している場合、routes.rbヒットするコントローラー アクションをファイルで指定しましたか? たとえば、次のものが必要です。

match 'comments' => 'comments#index'

ビューファイルのタイトルはindex.html.erb.

また、コメント リソースをネストしている場合でも、宣言する必要があります。

resources :comments, only: :index                     # not nested

あなたのルートが機能するように。

于 2013-04-25T01:34:46.380 に答える
0

routes.rb ファイルを次のように設定します。

resources :projects do
  resources :comments
end

resources :comments
于 2013-04-25T00:35:47.140 に答える
0

これを解決するために、新しいコントローラー ページを作成しました。

route.rb

match 'comments' => 'comments#admin'

コメント_コントローラー.rb

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