正确的路由路径语法

问题描述 投票:1回答:1

因此,我有一个用于显示播放器的组件,该组件使用了我的displayPlayerObject函数。问题是它在我的routes.rb中没有正确的路由来进行函数提取和POST。模型关系具有属于团队的玩家,并且获取玩家的路径是“ http://localhost:3000/api/teams/1/players/1” 1,即前者的团队ID和后者的玩家ID。但是,如何使displayPlayerObject以语法方式相同的方式工作?以及route.rb中的POST看起来如何?我也怀疑我的玩家控制器的“显示”也是错误的。

displayPlayerObject函数(已编辑):

export const displayPlayerObject = (id, teamId, type) => {
    return dispatch => {
        const data = { id };
        fetch(`/api/teams/:team_id/players/show`, {
            method: 'post',
            headers: {
                "Content-Type": "application/json",
                Accept: "application/json",
            },
            body: JSON.stringify(data)
        })
            .then(res => res.json())
            .then(responseJSON => { dispatch({ type , player_object: responseJSON})
            })
    }
};

我的routes.rb(已编辑):

Rails.application.routes.draw do
  scope '/api' do

    post "teams/show", to: 'teams#show'
    post "teams/:team_id/players/show", to: 'players#show'

    resources :teams do
      resources :players
      resources :star_players
    end
  end
end

播放器控制器显示(已编辑):

  def show
      Player.find(params[:id])
    render json: @player, status: 200
  end
javascript ruby-on-rails nested-routes
1个回答
1
投票

让我们看起来更好。

首先,Player.find_by(id: params[:id])是无意义的,因为find_by(id: params[:id])等于where(id: params[:id]).take。最好用看起来更好的经典find(params[:id])代替。

您的主要问题是什么,用POST命名displayObject的意义是什么?对我来说,展示东西意味着把它拿给我。如果您想找一些玩家,您需要致电api/teams/:team_id/players/:id。但是,如果要创建新播放器,则需要向/api/teams/:team_id/players路由发出POST请求。

P.S.1只需将请求方法从POST更改为GET。然后添加到您的承诺:

.then(res => {
 console.log(res)
})

观察服务器返回什么

© www.soinside.com 2019 - 2024. All rights reserved.