如何在 rails 上成功保存作为 POST- ruby 收到的 json 对象
How to succesfully save a json object recieved as POST- ruby on rails
我正在尝试创建一个允许用户提交评论的应用程序。
我使用 survey.js 其中 returns 一个带有响应的 json 对象,这里是将请求发送到所需 url 的咖啡脚本文件:
$.ajax({
type:'POST',
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
在我的控制器中,我尝试保存适当的参数:
def create
if validate_user
@submission = Submission.new(submission_params)
if @submission.save
redirect_to '/surveys/saved'
else
redirect_to '/surveys/nosaved'
end
end
end
但是我从服务器看到这个输出:
"Started POST "/surveys/save" for ::1 at 2016-08-01 00:21:47 -0400
Processing by SurveysController#create as */*
Parameters: {"question1"=>"eh", "question2"=>"1", "question3"=>"3", "question4"=>"1", "question5"=>"1", "question6"=>"3", "question7"=>"4", "question8"=>"1", "question9"=>"2", "question10"=>"1"}
Can't verify CSRF token authenticity"
请告知,根据我的研究,我似乎需要在我的请求前添加真实性令牌,但我不确定该怎么做。
谢谢!
****更新**
我的应用程序布局文件中确实有 CSRF 元标记
******更新 2*******
我在 Coffee 脚本中尝试了以下操作,结果相同。
$.ajax({
type:'POST',
beforeSend: test = (xhr)-> return xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf token"]').attr('content'))
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
});
以下步骤将为您解决问题。
- 确保您的应用程序布局文件中有 csrf_meta 标记。
将 beforeSend 添加到所有 ajax 请求以设置 header 如下所示。
$.ajax({
类型:'POST',
发送前:函数(xhr){
return xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf token"]').attr('content'));
},
url: "/surveys/save",
数据:survey.data,
数据类型:JSON,
成功:警报("saved")
});
解决方案与 Abid 尝试做的一样,但只需在咖啡脚本中声明 header。
$.ajax({
type:'POST',
headers: {'X-CSRF-Token': $('meta[name="csrf token"]').attr('content')},
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
})
我正在尝试创建一个允许用户提交评论的应用程序。
我使用 survey.js 其中 returns 一个带有响应的 json 对象,这里是将请求发送到所需 url 的咖啡脚本文件:
$.ajax({
type:'POST',
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
在我的控制器中,我尝试保存适当的参数:
def create
if validate_user
@submission = Submission.new(submission_params)
if @submission.save
redirect_to '/surveys/saved'
else
redirect_to '/surveys/nosaved'
end
end
end
但是我从服务器看到这个输出:
"Started POST "/surveys/save" for ::1 at 2016-08-01 00:21:47 -0400
Processing by SurveysController#create as */*
Parameters: {"question1"=>"eh", "question2"=>"1", "question3"=>"3", "question4"=>"1", "question5"=>"1", "question6"=>"3", "question7"=>"4", "question8"=>"1", "question9"=>"2", "question10"=>"1"}
Can't verify CSRF token authenticity"
请告知,根据我的研究,我似乎需要在我的请求前添加真实性令牌,但我不确定该怎么做。
谢谢!
****更新**
我的应用程序布局文件中确实有 CSRF 元标记
******更新 2*******
我在 Coffee 脚本中尝试了以下操作,结果相同。
$.ajax({
type:'POST',
beforeSend: test = (xhr)-> return xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf token"]').attr('content'))
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
});
以下步骤将为您解决问题。
- 确保您的应用程序布局文件中有 csrf_meta 标记。
将 beforeSend 添加到所有 ajax 请求以设置 header 如下所示。
$.ajax({ 类型:'POST', 发送前:函数(xhr){ return xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf token"]').attr('content')); }, url: "/surveys/save", 数据:survey.data, 数据类型:JSON, 成功:警报("saved") });
解决方案与 Abid 尝试做的一样,但只需在咖啡脚本中声明 header。
$.ajax({
type:'POST',
headers: {'X-CSRF-Token': $('meta[name="csrf token"]').attr('content')},
url: "/surveys/save",
data: survey.data,
success: alert("saved"),
dataType: JSON
})