javascript - 可编辑表单 ActiveRecord::RecordNotFound(找不到带有 'id'=undefined 的视频)
问题描述
我正在尝试创建一个表单,用户可以在其中编辑现有的视频标题和描述。发送 PATCH 请求时,出现以下错误。参数正在读取正确的视频 ID,但在错误的位置。我需要修改什么才能使其工作?
编辑表格
class Edit extends React.Component {
constructor(props) {
super(props)
this.state = {
video_id: this.props.match.params.id,
video_title: "",
video_description: "",
}
this.handleSubmit = this.handleSubmit.bind(this);
}
update(field) {
return (e) => {
this.setState({
[field]: e.currentTarget.value
})
}
}
handleSubmit() {
// debugger
this.props.updateVideo(this.state.video_id)
}
render() {
return (
<div className="edit-container">
<form className="edit-form" onSubmit={this.handleSubmit}>
<label>
<input
type="text"
value={this.state.video_title}
placeholder="Your video's title"
onChange={this.update("video_title")}
/>
<div>{this.state.video_title}</div>
</label>
<label>
<input
type="textarea"
value={this.state.video_description}
placeholder="Your video's description"
onChange={this.update("video_description")}
/>
</label>
<button>Edit</button>
</form>
</div>
);
}
}
export default Edit;
编辑容器
import { connect } from 'react-redux';
import Edit from './edit';
import { fetchVideo, updateVideo } from '../../actions/video_actions';
const mSTP = ( state, ownProps ) => {
return {
// video: state.entities.videos[state.session.id],
video: state.entities.videos[ownProps.match.params.id],
// errors: state.errors
}
};
const mDTP = dispatch => ({
fetchVideo: videoId => dispatch(fetchVideo(videoId)),
updateVideo: video => dispatch(updateVideo(video)),
});
export default connect(mSTP, mDTP)(Edit);
视频API工具
export const updateVideo = video => {
return $.ajax({
method: 'patch',
url: `api/videos/${video.id}`,
data: { video }
})
}
视频控制器
def update
@video = Video.find(params[:id])
if @video.update(video_params)
render :show
else
render json: @video.errors.full_messages, status: 422
end
end
def video_params
params.require(:video).permit(:video_title, :video_description, :owner_id, :video_url)
end
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
root to: 'static_pages#root'
namespace :api, defaults: {format: :json} do
resources :users, only: [:create, :index]
resource :session, only: [:create, :destroy]
resources :videos
end
end
解决方案
在 handleSubmit 中,您将 video_id 传递给 updateVideo 函数:
handleSubmit() {
// debugger
this.props.updateVideo(this.state.video_id)
}
但是您的 updateVideo 函数需要一个视频对象:
export const updateVideo = video => {
return $.ajax({
method: 'patch',
url: `api/videos/${video.id}`,
data: { video }
})
}
所以你从video.id
.
推荐阅读
- c# - 我如何使用 C# 在 Google 电子表格中准备空单元格?
- unity3d - Unity3D - 线渲染器无法通过相机看到距离
- laravel - 使用 laravel scout 时,searchable() 不会更新相关模型
- git - 如何在不推 --force 的情况下修复 git 中的非快进
- python-3.x - tkinter 上的重置按钮
- rest - 我应该将我的 REST API 设为 PUT 还是 POST 以进行文件上传?
- react-native - 下面是我的代码,我有一个错误: undefined is not an object (evalating 'navigation.navigate')
- c++ - 如何为对象的向量使用setter
- python - 相对于同一模型中的其他字段过滤 django 外键下拉列表
- json - 仅解组已批准的字段