Извлечение значений и форматирование XML-фида Rails3 - PullRequest
1 голос
/ 19 февраля 2012

У меня есть следующий фид с внешнего сайта, который я ввел в свое приложение rails3.2 через httparty.

Может показаться, что у меня перезапущенный момент, и я не могу понять, какна земле, чтобы отформатировать / оформить его.Нужно ли использовать нокогири или это проще?

["radcheck", [{"attribute_name"=>"User-Password", "batch_user_id"=>nil, "id"=>22, "op"=>":=", "radcheck_serial"=>nil, "raduser_id"=>nil, "username"=>"simon", "value"=>"pass"}, {"attribute_name"=>"User-Password", "batch_user_id"=>nil, "id"=>23, "op"=>":=", "radcheck_serial"=>nil, "raduser_id"=>nil, "username"=>"silver", "value"=>"rain"}.....

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Учитывая ваши данные образца:

feed = ["radcheck", [
  {"attribute_name"=>"User-Password", "batch_user_id"=>nil, "id"=>22, "op"=>":=", "radcheck_serial"=>nil, "raduser_id"=>nil, "username"=>"simon", "value"=>"pass"},
  {"attribute_name"=>"User-Password", "batch_user_id"=>nil, "id"=>23, "op"=>":=", "radcheck_serial"=>nil, "raduser_id"=>nil, "username"=>"silver", "value"=>"rain"}
]]

if feed.is_a? Array && feed.size >= 2
  radcheck = feed.first  # do you need this first element?
  data = feed[1]
  # now you have an array in data, and can loop over each hash
  Array(data).each do |elem|
    puts elem["id"] # and so on
  end
end

Это работает в моей консоли, так что вы должны иметь возможность адаптировать это для вашего механизма шаблонов.

1 голос
/ 19 февраля 2012

Гм Я думаю, все, что вам нужно сделать, это перебрать второй элемент, который является массивом хеша:

В контроллере:

@feed = ... # Retrieve your feed with httparty or other

В поле зрения:

<p>
First element: <%= @feed[0] #="radcheck", don't know the meaning of this %>
</p>
<p>
Attributes:
<ul>
<% @feed[1].each do |item| %>
  <li>
  Name: <%= item.attribute_name %><br />
  Batch User ID: <%= item.batch_user_id %><br />
  ID: <%= item.id %><br />
  OP: <%= item.op %><br />
  ... and so on ...
  </li>
<% end %>
</ul>
</p>
...