【问题标题】:Syntax for correct Routes path正确路由路径的语法
【发布时间】:2020-05-10 10:15:54
【问题描述】:

所以我有一个使用我的 displayPlayerObject 函数来显示播放器的组件。问题是我没有正确的路线来获取函数和我的routes.rb中的POST。模型关系有球员属于球队,获得球员的路线是“http://localhost:3000/api/teams/1/players/1” 1 是前者的球队ID,后者的球员ID。但是如何让 displayPlayerObject 以同样的方式工作呢? routes.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】:

    让我们让它看起来更好。

    首先Player.find_by(id: params[:id]) 是废话,因为find_by(id: params[:id]) 等于where(id: params[:id]).take。最好用经典的find(params[:id]) 替换它,这样看起来好多了。

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

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

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

    并观察服务器返回什么

    P.S.2 更改请求到

    fetch(`/api/teams/:team_id/players/:id`)
    

    在控制器中通过:id找到播放器

    【讨论】:

    • 好的,我添加了编辑控制器、路由和 displayPlayerObject,终端没有显示任何问题,但是当我点击玩家卡片时,它没有正确显示。也许我的反应组件和容器有问题?你碰巧知道'react''redux'吗?
    • 我已经改变了我的答案。将 POST 更改为 GET 并添加 console.log 以承诺检查服务器返回的内容
    • 当我将请求方法更改为 GET 时,我收到错误“未处理的拒绝 (TypeError): 无法在 'Window' 上执行 'fetch': 使用 GET/HEAD 方法的请求不能有正文”。这是因为“body: JSON.stringify(data)”和其他人说使用 POST 来代替。
    • 你在正文中发送什么数据?
    • data = 所选玩家的id
    猜你喜欢
    • 2020-04-23
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2016-04-11
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多