- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Sinatra 应用程序,它从外部 API 加载信息并将其显示在页面上。这是在 Sinatra 中完成的,它获取信息并将其放入临时模型实例(未保存),因此更容易在 View 中访问其所有属性。
现在,当用户单击一个链接时,我希望将模型实例保存到数据库中,我认为这只能通过 AJAX 等来完成,因为最后一个请求已经完成并且没有一个实例仍然存在。我认为我需要提取相应 HTML 元素的所有信息并制作一个 AJAX-Post 到另一个路由。
我现在的问题是,我希望能够使用 @model = Model.create(params[:model])
创建(和保存)模型。使用表单会很清楚要做什么,但这不是一个选项,因为所有数据都显示在一个表格中,每个表格行都是模型的一个实例。
如何序列化点击链接所在的表格行中的数据,以便我可以如上所述使用它?
更新
最佳答案
你有没有考虑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/
我是一名优秀的程序员,十分优秀!