gpt4 book ai didi

javascript - 如何序列化来自非表单元素的数据并使其可从 params[ :model]

转载 作者:行者123 更新时间:2023-11-28 03:35:49 24 4
gpt4 key购买 nike

我有一个 Sinatra 应用程序,它从外部 API 加载信息并将其显示在页面上。这是在 Sinatra 中完成的,它获取信息并将其放入临时模型实例(未保存),因此更容易在 View 中访问其所有属性。

现在,当用户单击一个链接时,我希望将模型实例保存到数据库中,我认为这只能通过 AJAX 等来完成,因为最后一个请求已经完成并且没有一个实例仍然存在。我认为我需要提取相应 HTML 元素的所有信息并制作一个 AJAX-Post 到另一个路由。

我现在的问题是,我希望能够使用 @model = Model.create(params[:model]) 创建(和保存)模型。使用表单会很清楚要做什么,但这不是一个选项,因为所有数据都显示在一个表格中,每个表格行都是模型的一个实例。

如何序列化点击链接所在的表格行中的数据,以便我可以如上所述使用它?

更新

  • 我正在使用对象类的 多个 个实例,每个实例都在一个表行中!
  • 我正在使用DataMapper,只是临时对象没有被存储!
  • 不想弄乱我的整个设置!

最佳答案

你有没有考虑ActiveResource ?您可以使用 ActiveResource 来维护对象状态。如果您的 REST API 遵循约定,那么映射资源将非常容易。

关于后半部分将数据发送回您的 Controller ,您可以存储在隐藏变量中,并且在发布时应该很容易构造回对象并将其保存到数据库中。

有点像

#model
class MyModel < ActiveResource::Base
# set configs here
end

# To fetch record from REST API in controller or whatever
MyModel.find(1)

#in controller on form submit or AJAX
post "/path" do
MyModel.new(params[:myModel])
end

更新在不使用隐藏形式的情况下维护对象的状态

在javascript中你可以有类似的东西

var myModel = #{myModel.to_json}; #Ruby interpolation in HAML it will depend on templating language

在某些操作上,您可以更新 JSON 对象

并使用 AJAX 发布

$.post("post/path", myModel);

更多更新

在外部 JS 中

function my_js_function(obj) {
/* do something useful here like setting up object hash etc
*/
}

在 Ruby 模板中

<script>
var myObj = #{myObj.json}
my_js_function(myObj);
</script>

关于javascript - 如何序列化来自非表单元素的数据并使其可从 params[ :model],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com