Tenho um resultado ActiveRecord de uma operação de localização:
tasks_records = TaskStoreStatus.find(
:all,
:select => "task_id, store_name, store_region",
:conditions => ["task_status = ? and store_id = ?", "f", store_id]
)
Agora, quero converter esses resultados em uma matriz de hashes como esta:
[0] -> { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }
[1] -> { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }
[2] -> { :task_d => 10, :store_name=> "Koramanagala", :store_region=> "India" }
para que eu possa iterar pela matriz e adicionar mais elementos aos hashes e, posteriormente, converter o resultado em JSON
para minha resposta da API. Como posso fazer isso?
arrays
activerecord
hash
Avinash Mb
fonte
fonte
Respostas:
as_json
Você deve usar o
as_json
método que converte objetos ActiveRecord em Ruby Hashes, apesar de seu nomeserializable_hash
Você também pode converter qualquer objeto ActiveRecord em um Hash com
serializable_hash
e pode converter qualquer resultado ActiveRecord em um Array comto_a
, portanto, para seu exemplo:E se você quiser uma solução feia para Rails antes da v2.3
fonte
tasks_records = TaskStoreStatus.all.map(&:attributes)
..as_json
,&:serializable_hash
e&:attributes
? Tem a ver com auxiliares ActiveRecord ou diretamente com desempenho? obrigado antecipadamente pessoal! @Dom @Rigo @Fredrik ETalvez?
Se você precisar de chaves de símbolos:
fonte
Para o ActiveRecord atual (4.2.4+), há um método
to_hash
noResult
objeto que retorna um array de hashes. Você pode então mapear sobre ele e converter em hashes simbolizados:Veja a documentação ActiveRecord :: Result para mais informações .
fonte
to_hash
método: tenteto_ary
. Estranhamente, isso funcionou para mim.