【发布时间】:2018-04-18 16:55:12
【问题描述】:
我的 Rails 应用程序出现问题。 我让用户在完成编辑后提交并填写括号。 :
<%= form_for Tournoi.new do |f| %>
<button id="SaveButton" onclick="save()">Save</button>
<% end %>
使用 XMLHttpRequest 我将 json 对象发送到我的数据库:
function save() {
var data = {};
var tojs = myDiagram.model.toJSON();
data.payload = tojs;
//var parsed_json = JSON.parse(data);
var json = JSON.stringify(data);
myDiagram.isModified = false;
var request = new XMLHttpRequest();
request.onload = callback;
request.open("post", "http://localhost:3000/malesingle", true);
request.setRequestHeader("Content-Type", "application/json");
request.send(json)
我的迁移设置为接受 json 对象作为有效负载:
class CreateTournois < ActiveRecord::Migration[5.1]
def change
create_table :tournois do |t|
t.json 'payload'
t.timestamps
end
end
end
我的 tournois 控制器是我认为我遇到一些困难的地方:
def create
@tournoi = Tournoi.new params[:payload]
if @tournoi.save
redirect_to root_url
flash[:success] = "Your tournament bracket has been validated!"
redirect_to @tournoi
else
redirect_to malesingle_url
end
end
这是每次我尝试提交括号时的问题,我的 json 对象 stringify 的内容出现在我的终端上,POST 参数似乎通过了,我的有效负载参数变成了我的 json 对象的内容,但出于某种原因我得到一个参数错误(分配属性时,您必须传递一个哈希作为参数。)这使我的迁移回滚。
我知道错误来自我的控制器,但我似乎无法找到我出错的地方,或者是否缺少某些东西或顺序错误。
【问题讨论】:
-
在 Rails 应用程序中看到的
params[:payload]是一个常规字符串。在将其传递给new方法之前,您需要将其解析为 json:Tournoi.new(JSON.parse(params[:payload]) -
另外,我认为您需要在模型中指定字段:
Tournoi.new(payload: JSON.parse(params[:payload]) -
@mikwat
def create @tournoi = Tournoi.new(payload: JSON.parse(params[:payload])),仍然让我出错,从 ArgumentError 到 TypeError 没有将 nil 隐式转换为字符串
标签: javascript ruby-on-rails xmlhttprequest ruby-on-rails-5