【问题标题】:Post not working React + Rails发布不工作 React + Rails
【发布时间】:2018-04-06 15:21:18
【问题描述】:

当我尝试发帖时,我收到 400(错误请求)错误。

我正在尝试将新玩家发布到团队中。

我的控制器

def create
@teams = Team.find(params[:team_id])  
@players = @teams.players.new(player_params)
  render json: @players
end

private
 def player_params
     params.require(:player).permit(:name, :photo, :nationality)
 end

功能

_handleSubmit = async (e) => {
e.preventDefault();
const teamId = this.props.match.params.id;
const payload = this.state.players;
console.log(payload);
try {
  const res = await axios.post(`/api/teams/${teamId}/players`, payload);
} catch (err) {
  console.log(err);
 }
};

_handleChange = (e) => {
const newState = { ...this.state.players };
newState[e.target.name] = e.target.value;
this.setState({ players: newState });
};

【问题讨论】:

  • 如果您知道请求正在访问正确的控制器,我会检查控制器中的 player_params 和 JavaScript 中的 payload。由于您拥有player_params,因此听起来您正在使用强参数,如果缺少所需的参数,则会引发 400 Bad Request。
  • 我编辑了我的函数,现在我没有收到 400 Bad Request 错误,但没有任何内容发布到我的数据库中。
  • 当你console.log(payload)时,那是什么样的?
  • 我得到的正是我在表单中输入的内容。
  • 啊,我才意识到你打电话给@teams.players.new(player_params)。调用 new 不会创建新玩家。如果你想在数据库中创建一条记录,你需要使用@teams.players.create(player_params)

标签: ruby-on-rails reactjs react-on-rails


【解决方案1】:

您需要强烈比较您发送的正文和您希望在服务器上接收的正文?

在后端,您不仅可以发送错误代码、错误消息或发生错误的字段标识符。

如果您将使用查询结果,请不要忘记设置await 语句:

const res = await axios.post(`/api/teams/${teamId}/players`, payload);

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2018-08-05
    • 2012-01-03
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多