Работа с хешами в ruby ​​на рельсах - PullRequest
1 голос
/ 18 февраля 2012

Мои извинения, если это было покрыто ранее;Я искал и искал, но я не нашел ответа ...

У меня есть следующий хеш:

input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'

Я хотел бы извлечь и отобразить значения - по одному на строку.Когда я запускаю его из консоли rails, я получаю правильные результаты:

    >> r1 = ActiveSupport::JSON.decode(input)
    => {"names"=>[{"name"=>"a1", "id"=>1}, {"name"=>"b2", "id"=>2}]}
    >> r1["names"].each do |x|
    ?> puts "#{x["name"]}"
    >> end
    a1
    b2
    => [{"name"=>"a1", "id"=>1}, {"name"=>"b2", "id"=>2}]

Вопрос в том, как мне воспроизвести это поведение в моем приложении rails?Я попробовал следующий метод, но в браузере возвращается только одно значение:

    module PageHelper
        def testcall()
        input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'
        r1 = ActiveSupport::JSON.decode(input)
        r1["names"].each do |a|
            return "Name: #{a["name"]}\n"
        end
   end

TIA!

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

return IN завершает цикл после первого элемента.Попробуйте добавить вывод в строку (включая символы новой строки \n между) в цикле, а затем вернуть эту строку после цикла.

0 голосов
/ 18 февраля 2012

Как сказал @Irfy, это происходит из-за заявления return. Следующий код работает,

  module PageHelper
    def testcall()
      input = '{"names":[{"name":"a1","id":1},{"name":"b2","id":2}]}'
      r1 = ActiveSupport::JSON.decode(input)
      r1["names"].map{|hash| hash["name"]}
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...