首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >axios将请求提交给rails-API

axios将请求提交给rails-API
EN

Stack Overflow用户
提问于 2018-03-13 22:44:03
回答 1查看 1.9K关注 0票数 2

我试图在rails上发布一个新的评分实例--API,但是每当我提交它时,应用程序就会在不更新状态的情况下重新设置它自己--控制台没有返回错误,但它也没有呈现json --很多事情都可能是错误的,但是有谁知道我应该从哪里开始查看呢?

我的ScoreForm.js

代码语言:javascript
复制
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>
    );
  }
}

我的rails routes.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-13 23:06:43

如果您运行rails routesrake routes (取决于您的rails版本),您将看到routes.rb中定义的资源正在创建哪些路由。将请求映射到控制器中的update方法中,因此您需要定义它以更新资源并返回您在React应用程序中期望的JSON响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49267046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档