我正在尝试将一个新的分数实例发布到我的 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 routes
或rake routes
(取决于您的 rails 版本(,您将看到routes.rb
中定义的这些资源正在创建哪些路由。PUT 请求映射到控制器中的 update
方法中,因此您需要定义它以更新资源并在 React 应用程序中返回您期望的 JSON 响应。