2015-04-14 71 views
0

我對rails和haml的ruby比較陌生。我想從haml中的我的JSON對象中獲取名稱。使用HAML對JSON對象進行迭代部分

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

我想從名字打印出 「Campaign_1」, 「Campaign_2」 ......我有這個在我的.rb文件。這是我在我的haml文件中。我已經嘗試了幾個這個循環的變化,但沒有一個相當有效。這是我最近的一個。

這是我在我的HAML文件:

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

這給了我

undefined method `each' for nil:NilClass` 

任何幫助,將不勝感激。謝謝!

重要提示: 這HAML文件是部分

回答

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"] 
+0

謝謝。我試圖在一個部分給我這些錯誤做到這一點。我將如何做到這一點在部分? – applecrusher

+0

你是怎麼做到的? :偏好=> {廣告系列:廣告系列}?這給了我一個非常奇怪的錯誤 – applecrusher

+0

你也可以將局部人傳遞給局部變量,但局部變量不會有@(廣告系列,不是@campaigns)。另外,我不確定你想要從控制器渲染一個部分。只需渲染你的視圖,並且你可以總是將視圖中的代碼分解成一部分,如果需要的話就幹掉它。 –

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 
+0

的RB文件的代碼是在控制器中,所以我不明白你的意思。爲了從JSON字符串中的每個對象中獲取名稱,我需要更改哪些內容? – applecrusher

+0

for循環在你的控制器中? @ user1917363 – NorCalKnockOut

+0

編號for循環在haml文件中 – applecrusher