我们将json渲染为ERB中的数据属性。例如:
location.html.erb
<div data-location="<%= render 'location_json' %>">
location_json.erb
<%= @location.to_json(
only: [:id, :name, :lat, :lng],
method: [:display_name]) %>
渲染的html看起来像:
<div data-location="{"id":16,"lat":"35.688195","lng":"-82.564652","name":"Mountain"}">
但我希望它更具可读性,例如:
<div data-location='{"id":16, "lat":35.688195, "lng":-82.564652, "name":"Mountain"}'
&GT;
有没有办法告诉ERB或to_json使用单引号呈现而不是转义双引号?
是否可以将可读的json呈现为HTML数据属性。通过可读性,我的意思是最小的逃避。
答案 0 :(得分:2)
<div data-location="<%= @location.to_json %>">
中的
package.json
参考: http://api.rubyonrails.org/classes/ERB/Util.html#method-c-json_escape
答案 1 :(得分:0)
任何gsub。(/'/,'')也会转义引号。
您甚至可以创建一个表并迭代json的响应,将键放在第一个td中,将值放在第二个上。如果你有一两个jsons会很好。如果您有很多分隔数量的元素,请为每个元素创建一行。
答案 2 :(得分:0)
在不破坏html页面的情况下,无法在数据属性中使用未转义的JSON。
但是,可以使用比Rails / ERB默认值更具可读性的转义JSON。
默认情况下,ERB会转义双引号,这使得JSON特别难以阅读。代替
helper.rb
def my_html_escape(s)
{ '&' => '&', '>' => '>', '<' => '<', "'" => ''' }.each do |k,v|
s = s.gsub(k,v)
end
s
end
location.html.erb
<div data-location='<%= raw my_html_escape(@location.to_json) -%>'>
产生
<div data-location='{"id":16, "lat":35.688195, "lng":-82.564652, "name":"Mountain"}'>