Это означает, что объект, к которому вы пытаетесь получить доступ, не загружен, поэтому напишите запрос, который делает попытку соединения объекта, к которому вы пытаетесь получить доступ.
Например:
Если вы пытаетесь получить ObjectB из ObjectA, где ObjectB является внешним ключом в ObjectA.
Запрос:
SELECT objA FROM ObjectA obj JOIN FETCH obj.objectB objB
В вашем коде ключи 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
ПРИМЕЧАНИЕ: Если вы сохраняете объект ConceptPayment
как cp_obj
:
Я думаю, что вам нужно deep_symbolize_keys
. Ваш вопрос не детализирует, что такое объект ConceptPayment .
Если это объект Model , должно работать следующее:
as_json
для получения объекта как хеш Попробуйте cp_obj.as_json
. Обычно он получает объект в формате JSON (Rails 5.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] Надеюсь, это поможет.