Ruby Array错误地传递给javascript层

时间:2019-07-10 00:22:20

标签: javascript ruby-on-rails arrays json

我有一个应用程序,在我的控制器上有一个元素数组。我想将此数组传递给Javascript视图,然后将其转换为JSON并进行解析。

这是我的观点:

<% content_for :page_meta do %>
    <script>
        const filterItems = "<%= @filter_options %>";
        const productItems = "<%= @mdms_products %>";           
    </script>

如果我调试@filter_options。我在IRB上有此广告:

@filter_options.class # => Array

值:

[{:name=>"Solution Type", :uid=>"application", :component=>"HierarchicalListFilter", :props=>{:rootUrl=>"/insulation/commercial/enclosure/applications", :rootText=>"Enclosure Solutions"}, :values=>[{:name=>"Walls", :slug=>"walls", :children=>[{:name=>"Framed", :slug=>"framed", :children=>[{:name=>"Steel Stud", :slug=>"steel-stud"}, {:name=>"Wood Stud", :slug=>"wood-stud"}]}, {:name=>"Masonry", :slug=>"masonry", :children=>[{:name=>"Concrete Masonry Unit", :slug=>"concrete-masonry-unit"}]}, {:name=>"Concrete", :slug=>"concrete", :children=>[{:name=>"Precast", :slug=>"precast"}, {:name=>"Tilt-up", :slug=>"tilt-up"}, {:name=>"Cast-in-place", :slug=>"cast-in-place"}]}, {:name=>"Metal Building", :slug=>"metal-building"}, 

一切看起来都很完美吧?但是,在我的JavaScript控制台调试中,当我获得productItems的值时,我得到了这个奇怪的字符串:

[{:name=&gt;&quot;Solution Type&quot;, :uid=&gt;&quot;application&quot;, :component=&gt;&quot;HierarchicalListFilter&quot;, :props=&gt;{:rootUrl=&gt;&quot;/insulation/commercial/enclosure/applications&quot;, :rootText=&gt;&quot;Enclosure Solutions&quot;}, :values=&gt;[{:name=&gt;&quot;Walls&quot;, :slug=&gt;&quot;walls&quot;, :children=&gt;[{:name=&gt;&quot;Framed&quot;, :slug=&gt;&quot;framed&quot;, :children=&gt;[{:name=&gt;&quot;Steel Stud&quot;, :slug=&gt;&quot;steel-stud&quot;},

当然,当我尝试执行JSON.parse(filterItems)时,会显示一个解析错误。

那么,用Javascript将Ruby数组传递给Json的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

Ruby与JavaScript的符号完全不同,因此您必须以正确的形式表示它,并确保它不会被HTML转义:

defmodule Foo.Skeleton do
  def hello do
  end

  def goodbye do
  end
end

将整个内容呈现为JSON并通过AJAX加载也可能更容易。