我想将一些数据发布为html属性。假设有一个rails变量
@fields = [{:name => "id", :type => :integer}]
我想在页面中发布与jquery的.data()一起使用。所以在.html.erb中我有
<%= form_tag( {:action => 'whatever'}, {... , :"data-fields" => h(@fields.to_json)}) %>
但是在渲染时,字符串[{"name":"id","type":"integer"}]
中的引号会混淆其他属性,因为Rails form_tag使用双引号将整个json字符串括在双引号中。如何使用Rails将字符串作为属性发布json?
答案 0 :(得分:0)
您是否尝试过以下操作?
<%= form_tag { :action => "whatever" }, { :data => { :fields => h(@fields.to_json) } } %>
答案 1 :(得分:0)
以下是我如何解决问题:
在表单标记中,我执行了:"data-fields" => @fields.to_json.gsub('"',"'")
。
这会产生这种类型的HTML:
"data-fields"="[{'name':'id','type':'integer'}]"
然后,在JS中,我检索它:
$.parseJSON($('form').data('fields').replace(/'/g,'"'))
答案 2 :(得分:0)
你试过escape_javascript
吗?虽然它有known downsides,但它并不完全是为了转义JSON,我不确定转义引号是否适用于HTML属性。
答案 3 :(得分:0)
使用序列化程序解决您的情况episode on railscasts。关键是序列化器用$ quot替换双引号; serialuzer还使您能够选择要序列化的属性并包含关联。
答案 4 :(得分:0)
经过一些反复试验后,这是有效的。
服务器端:
<% @fields = [{:name => "id", :type => :integer}] %>
<%= form_tag( '/posts/new', {id:'example',:data => { :fields=>@fields}}) %>
生成的HTML:
<form accept-charset="UTF-8" action="/posts/new" data-fields="[{"name":"id","type":"integer"}]" id="example" method="post">
Javascript与JQuery的数据方法
fields = $('#example').attr('data-fields')
我正在使用rails 2.3.8和jquery-rails 2.2.1