使用HAML Partial迭代JSON对象

时间:2015-04-14 23:11:15

标签: ruby-on-rails ruby json

我对rails和haml上的ruby相对较新。我想从haml中获取我的JSON对象的名称。

我的.rb文件中有这个

campaigns = '[{"name":"Campaign_1"},{"name":"Campaign_2"},{"name":"Campaign_3"}]'
render "evaluate" , :locals => {:campaigns => campaigns}

我想打印出" Campaign_1"," Campaign_2" ......从名字。这是我在haml文件中的内容。我已经尝试过这种for循环的几种变体,但没有一种非常有效。这是我最新的一个。

这是我在haml文件中的内容:

- for campaign in @campaigns
        %input{:type => "checkbox"}
          - campaign.name

这给了我

undefined method `each' for nil:NilClass` 

任何帮助将不胜感激。谢谢!

重要提示: 这个haml文件是部分

2 个答案:

答案 0 :(得分:1)

@campaign未定义,因为您在控制器中创建了局部变量,而不是实例变量 您需要在控制器中添加@campaigns才能在视图中访问它。

编辑:

控制器:

@campaigns = '[{"name":"Campaign_1"},{"name":"Campaign_2"}.{"name":"Campaign_3"}]'
render "evaluate" , :locals => {:campaigns => campaigns}`

查看:

- for campaign in @campaigns
    %input{:type => "checkbox"}
      - campaign.name

答案 1 :(得分:1)

您可以使用本地人将值传递给您的视图。在您的控制器代码中,您需要将JSON转换为哈希并修复本地语法:

json_campaigns = '[{"name":"Campaign_1"},{"name":"Campaign_2"},{"name":"Campaign_3"}]'
campaigns = JSON.parse json_campaigns
render "evaluate" , :locals => {campaigns: campaigns}

在您看来:

- campaigns.each do |c|
  %input{:type => "checkbox"}
    = c["name"]