【发布时间】: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