перебор данных yaml в шаблоне посредника

У меня есть список проектов в файле yaml, который я хотел бы динамически перебирать для шаблона в приложении посредника, но я не уверен, как и если я вообще могу/должен делать это более динамично.

У меня есть:

data.projects.each do |f|
  proxy "/work/#{f[:name].parameterize}.html", "/work/template.html", 
    :locals => { name: f[:name], client: f[:client], ... } #would like to dynamically pull in keys as locals.
end

ignore "/work/template.html"

Ямл:

-  name: Acme Website
   client: Acme Inc
   overview: "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw."
   skills:
   - design
   - development
   - branding
   - ecommerce
   stack:
   - middleman
   - branding
   - design

person ere    schedule 26.02.2013    source источник


Ответы (2)


Может быть, вы могли бы просто использовать полный projectobject в своих шаблонах?

data.projects.each do |p|
  proxy "/work/#{p[:name].parameterize}.html", "work/template.html",
    :locals => { :p => p }
end

... должен предоставить вам доступ к вашему проекту в пределах http://0.0.0.0:4567/work/acme-website.html:

<ul>
 <li><%= p.name %></li>
 <li><%= p.client %></li>
</ul>

Результат:

  • Веб-сайт Acme
  • Акме Инк
person Volker Rose    schedule 27.06.2013

Сначала вам нужно проанализировать YAML обратно в объект Ruby, а затем перейти оттуда:

require 'yaml'

doc = YAML.load(<<EOT)
---
-  name: Acme Website
  client: Acme Inc
  overview: "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw."
  skills:
  - design
  - development
  - branding
  - ecommerce
  stack:
  - middleman
  - branding
  - design
EOT

require 'pp'
pp doc

Что выводит:

[{"name"=>"Acme Website",
  "client"=>"Acme Inc",
  "overview"=>
  "Cupcake ipsum dolor sit amet wafer gummi bears pudding applicake. Jujubes brownie powder. Sweet roll powder gingerbread gummies. Cupcake ice cream sweet roll pie lollipop. Jelly-o jelly-o apple pie chupa chups jelly jujubes gingerbread. Icing carrot cake powder chupa chups. Pudding sweet roll jelly-o muffin faworki biscuit. Marzipan marshmallow cake tiramisu caramels bear claw carrot cake cotton candy. Toffee danish sweet roll. Cookie topping powder toffee ice cream muffin dragée. Soufflé caramels apple pie chocolate cake cookie cake. Macaroon tiramisu halvah soufflé. Dessert toffee halvah chocolate cake bear claw.",
  "skills"=>["design", "development", "branding", "ecommerce"],
  "stack"=>["middleman", "branding", "design"]}]

Это массив хэшей. Вы можете выполнить итерацию по возвращаемому массиву, извлечь встроенные хэши и обработать их в обычном режиме:

doc.each { |h|
  puts h['name']
  puts h['client']
}
person the Tin Man    schedule 26.02.2013
comment
может быть, это вопрос с подвохом, yaml уже загружен с data.projects, я просто не знаю, как поместить ключи в хеш: locals. - person ere; 26.02.2013