ruby 为什么index方法有效而show方法无效?

esbemjvw  于 2023-01-01  发布在  Ruby
关注(0)|答案(1)|浏览(119)

以下是我的routes.rb文件:

Rails.application.routes.draw do
  #Routes
  get 'users/s/:username', to: "users#search"
  resources :users, only: [:index, :show, :create, :update, :destroy]
  resources :forum_threads, only: [:index, :show, :create, :update, :destroy] do
    resources :comments, only: [:index, :show, :create, :update, :destroy]
  end
end

这是我的控制器中与注解相关的部分:

class CommentsController < ApplicationController
    #GET /Comments [Get all comments for a specific thread]
    def index
        @Comments = Comment.where("ForumThread_id = ?", params[:forum_thread_id])
        render json: @Comments
    end

    #GET /Comments/:id [Get a specific comment by its ID]
    def show
        @Comment = Comment.find(params[:id])
        render json: @comment
    end

我尝试通过Postman发送请求。index方法似乎可以用于注解(as seen here),但show方法似乎不起作用(like here)。为什么show方法不起作用?

oxcyiej7

oxcyiej71#

您正在使用嵌套路径
因此,在本例中,您应该查找comment_id而不是id

def show
  @comment = Comment.find(params[:comment_id])
  render json: @comment
end

您可以使用检查参数

rails routes | grep comments

此外,在父范围内搜索注解也是一种最佳实践
在您的情况下forum_threads
确保添加了额外的条件,以使用params[:id]获取属于forum_thread的注解
例如:

@comment = Comment.find_by(ForumThread_id: params[:id], id: params[:comment_id])

如果你有适当的联想,你可以重写为

@forum_thread = ForumThread.find(params[:id])
@comment = @forum_thread.comments.find(params[:comment_id])

相关问题