axios PUT 请求 rails-API

axios PUT request to rails-API

我正在尝试 post 我的 rails-API 一个新的乐谱实例,但每当我提交它时,应用程序都会自行重置而不更新状态 - 控制台是'没有返回错误,但它也没有呈现 json - 很多事情都可能是错误的,但有没有人知道我应该从哪里开始寻找。

我的ScoreForm.js

export default class ScoreForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      strokes: null,
      selectedCourse: null,
    };

  }

  selectCourse(){
    console.log(this.refs.courseSelector.value);
    this.setState( {selectedCourse: this.refs.courseSelector.value} );
  }

  enterStrokes(){
    console.log(this.refs.typeStrokes.value);
    this.setState({strokes: this.refs.typeStrokes.value});
  }

  handleSubmit = () => {
    const score = { strokes:this.state.strokes, user_id: this.props.currentUser, course_id: this.state.selectCourse}
    axios.put(
      `http://localhost:3001/api/v1/scores`, {score: score})
    .then(response => {
      console.log(response);
      this.props.updateScores(response.data)
    })
    .catch(error => console.log(error))
  }

  render() {
    var courseOptions = (this.props.courseList.map((course) => {
      return <option key={course.id} value={course.id}>{course.name}</option> ;
    }));
    return (
      <form onSubmit={this.handleSubmit}>
        <input ref='typeStrokes' onChange={(e) => {this.enterStrokes(); } } />
        <select ref='courseSelector' onChange={(e) => { this.selectCourse(); } }>{courseOptions}</select>
      </form>
    );
  }
}

我的railsroutes.rb

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      get 'users/scores' => 'scores#index'
      get 'users/:id/scores' => 'users#scores'
      resources :users
      resources :scores
      resources :courses
    end
  end

end

我的scores_controller.rb

module Api::V1
  class ScoresController < ApplicationController
    before_action :set_course

    def index
      @scores = Score.order("created_at DESC")
      render json: @scores
    end

    def create
      differential = (params[:score][:strokes].to_i) - @course.rating

      @score = Score.create(score_params.merge(:differential => differential))
      render json: @score
    end

    private

    def set_course
      @course = Course.find(params[:course_id])
    end

    def score_params
      params.require(:score).permit(:user_id, :course_id, :strokes)
    end

  end
end

如果您 运行 rails routesrake routes(取决于您的 rails 版本),您将看到在您的 routes.rb 中定义的那些资源是什么路由创造。 PUT 请求被映射到控制器中的 update 方法,因此您需要定义它来更新您的资源和 return 您在 React 应用程序中期望的 JSON 响应。