Как получить доступ к хеш-данным - Ruby on rails

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

Например:

Если вы пытаетесь получить ObjectB из ObjectA, где ObjectB является внешним ключом в ObjectA.

Запрос:

SELECT objA FROM ObjectA obj JOIN FETCH obj.objectB objB
0
задан Alejandro Cortés 4 March 2019 в 01:18
поделиться

2 ответа

В вашем коде ключи 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
ответ дан mechnicov 4 March 2019 в 01:18
поделиться

ПРИМЕЧАНИЕ: Если вы сохраняете объект 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"

Если это [1116 ] не объект модели , поэтому я считаю, что 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"
[ 1126] Надеюсь, это поможет.

0
ответ дан Vaibhav Kaushal 4 March 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: