enter image description here我是ruby on rails的新手。我正在尝试使用ajax post请求将数据添加到数据库。但我无法这样做。那么,任何人都可以帮我将数据添加到PostgreSQL数据库。
<script>
$(document).ready(function () {
$('#submit-button').click(function() {
$.ajax({
url: "http://localhost:3000/batches",
data: JSON.stringify({
name: $("#name").val(),
course_id: $("#course_id").val(),
start_date: $("#start_date").val(),
end_date: $("#end_date").val(),
status: $("#batch_status").val(),
}
),
error: function(error) {
console.log(error);
},
success: function(data) {
console.log(data);
},
type: 'POST'
});
});
})
</script>
&#13;
我的控制器代码是:
def new
@batch = Batch.new
respond_to do |format|
format.html
format.json
end
end
def create
@batch = Batch.new(batch_param)
respond_to do |format|
if @batch.save
format.html { redirect_to @batch, notice: "Save process completed!" }
format.json { render json: @batch, status: :created, location: @batch }
else
format.html {
flash.now[:notice]="Save proccess coudn't be completed!"
render :new
}
format.json { render json: @batch.errors, status: :unprocessable_entity}
end
end
end
def batch_param
params.require(:batch).permit(:name, :course_id, :start_date, :end_date, :status)
end
还让我知道我在这里做错了什么。或者我是否还必须添加额外的代码以便更好地操作。应对此操作的路线和模型进行哪些更改?
这些是我一直在犯的错误......
答案 0 :(得分:0)
您需要在帖子
中提供batch
param哈希值
data: JSON.stringify({
batch: {
name: $("#name").val(),
course_id: $("#course_id").val(),
start_date: $("#start_date").val(),
end_date: $("#end_date").val(),
status: $("#batch_status").val(),
}
}),
因为这是batch_param
要求的
另外,您要发布为JSON
,因此您应该发布json数据,而不是字符串数据
因此,请将以上内容替换为以下内容:
data: {
batch: {
name: $("#name").val(),
course_id: $("#course_id").val(),
start_date: $("#start_date").val(),
end_date: $("#end_date").val(),
status: $("#batch_status").val(),
}
},
dataType: "JSON",
这将为帖子添加足够的标题,RAILS将知道这是JSON,响应也将被解析为JSON。
答案 1 :(得分:0)
试试这个:
$.ajax({
type: "POST",
url: "http://localhost:3000/batches",
data: {
batch: {
name: $("#name").val(),
course_id: $("#course_id").val(),
start_date: $("#start_date").val(),
end_date: $("#end_date").val(),
status: $("#batch_status").val(),
}
},
error: function(error) {
console.log(error);
return false;
},
success: function(data) {
console.log(data);
return false;
},
})