Как получить доступ к хеш-данным - Ruby on rails - PullRequest
0 голосов
/ 04 марта 2019

У меня есть этот объект с данными, к которым я хочу получить доступ:

[#<ConceptPayment id: nil, amount: 1, price: 1000.0, concept_id: 3, concept_type: "RegisterType", created_at: nil, updated_at: nil, transaction_sara_id: nil, code: nil, date_code: nil, discount_amount: nil, type_discount_id: nil, observations: nil>]

Я попытался разобрать его в json с to_json:

"[{\"id\":null,\"amount\":1,\"price\":1000.0,\"concept_id\":3,\"concept_type\":\"RegisterType\",\"created_at\":null,\"updated_at\":null,\"transaction_sara_id\":null,\"code\":null,\"date_code\":null,\"discount_amount\":null,\"type_discount_id\":null,\"observations\":null}]"

, затем я сделал этоJSON.parse

[{"id"=>nil, "amount"=>1, "price"=>1000.0, "concept_id"=>3, "concept_type"=>"RegisterType", "created_at"=>nil, "updated_at"=>nil, "transaction_sara_id"=>nil, "code"=>nil, "date_code"=>nil, "discount_amount"=>nil, "type_discount_id"=>nil, "observations"=>nil}]

но я не могу получить доступ к данным, я просто хочу добиться этого data[:price]

Как я могу получить доступ к данным?Как конвертировать объект или получить доступ к данным json?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

В вашем коде ключи String.Но вы пытаетесь найти значение с помощью клавиши Symbol.

В этом случае вы должны использовать опцию symbolize_names.

string = "[{\"id\":null,\"amount\":1,\"price\":1000.0,\"concept_id\":3,\"concept_type\":\"RegisterType\",\"created_at\":null,\"updated_at\":null,\"transaction_sara_id\":null,\"code\":null,\"date_code\":null,\"discount_amount\":null,\"type_discount_id\":null,\"observations\":null}]"

data = JSON.parse(string, symbolize_names: true).first

data[:price] #=> 1000.0
0 голосов
/ 04 марта 2019

ПРИМЕЧАНИЕ: Если вы сохраняете объект ConceptPayment как cp_obj:

Я думаю, что вам нужно deep_symbolize_keys.Ваш вопрос не описывает, что такое тип объекта ConceptPayment .


Если это объект Model , должно работать следующее:

  1. Используйте as_json для получения объектакак хешПопробуйте cp_obj.as_json.Обычно он получает объект в формате JSON (Rails 5.2).
  2. Тогда вы должны использовать deep_symbolize_keys, вот так: my_hash = cp_obj.as_json.deep_symbolize_keys, и тогда вы сможете сделать my_hash[:price].

Пример (я только что запустил это на своей консоли Rails для класса User, который у меня есть):

irb(main):002:0> user = User.find 6
  User Load (7.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 6], ["LIMIT", 1]]
=> #<User id: 6, full_name: "Geeks", email: "geeks@abc.com", created_at: "2019-02-04 06:59:33", updated_at: "2019-02-04 06:59:33">
irb(main):003:0> user.as_json
=> {"id"=>6, "full_name"=>"Geeks", "email"=>"geeks@abc.com", "created_at"=>Mon, 04 Feb 2019 12:29:33 IST +05:30, "updated_at"=>Mon, 04 Feb 2019 12:29:33 IST +05:30}
irb(main):004:0> my_hash = user.as_json.deep_symbolize_keys
=> {:id=>6, :full_name=>"Geeks", :email=>"geeks@abc.com", :created_at=>Mon, 04 Feb 2019 12:29:33 IST +05:30, :updated_at=>Mon, 04 Feb 2019 12:29:33 IST +05:30}
irb(main):005:0> my_hash[:full_name]
=> "Geeks"

Если это не объект модели , тогда я считаю, что JSON.parse(cp_obj.to_json).deep_symbolize_keys должно работать (поскольку вы уже можете заставить JSON.parse работать)!

Пример:

irb(main):011:0> JSON.parse('{"name":"vaibhav", "more" : {"details": "balding guy! :P"}}').deep_symbolize_keys[:more][:details]
=> "balding guy! :P"

Надеюсь, это поможет.

0 голосов
/ 04 марта 2019

Вы пробовали data[0]['price'] или data['price']?

Похоже, что-то запрос activerecord будет возвращать.В этом случае вы можете просто присвоить результат запроса, скажем, «data» и получить доступ к каждому члену с помощью data['member_name'], если только запрос не вернет несколько элементов, в этом случае вам нужно будет сначала указать индекс, например, data[index_number]['member_name']

Я полагаю, что вы также можете сделать что-то вроде data.first.price или data.price

Rails 4: как получить доступ к атрибуту ActiveRecord_Relation-Object?

Интерфейс запросов Active Record

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...