axios PUT request to rails-API



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

我的分数表.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>
    );
  }
}

我的铁路路线.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 方法中,因此您需要定义它以更新资源并在 React 应用程序中返回您期望的 JSON 响应。

最新更新