134

検索操作の ActiveRecord 結果があります。

tasks_records = TaskStoreStatus.find(
  :all,
  :select => "task_id, store_name, store_region",
  :conditions => ["task_status = ? and store_id = ?", "f", store_id]
)

ここで、この結果を次のようなハッシュの配列に変換したいと思います。

[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" }

配列を反復処理し、ハッシュに要素を追加し、後で結果をJSONAPI 応答に変換できるようにします。これどうやってするの?

4

4 に答える 4

243

as_json

as_jsonその名前にもかかわらず、ActiveRecordオブジェクトをRubyハッシュに変換するメソッドを使用する必要があります

tasks_records = TaskStoreStatus.all
tasks_records = tasks_records.as_json

# You can now add new records and return the result as json by calling `to_json`

tasks_records << TaskStoreStatus.last.as_json
tasks_records << { :task_id => 10, :store_name => "Koramanagala", :store_region => "India" }
tasks_records.to_json

serializable_hash

ActiveRecord オブジェクトを でハッシュに変換することもできます。またserializable_hash、ActiveRecord の結果を で配列に変換することもできto_aます。たとえば、次のようになります。

tasks_records = TaskStoreStatus.all
tasks_records.to_a.map(&:serializable_hash)

また、v2.3 より前の Rails の醜いソリューションが必要な場合

JSON.parse(tasks_records.to_json) # please don't do it
于 2013-03-25T19:40:24.197 に答える
46

多分?

result.map(&:attributes)

シンボル キーが必要な場合:

result.map { |r| r.attributes.symbolize_keys }
于 2016-07-19T07:36:06.393 に答える
15

現在の ActiveRecord (4.2.4+) にはto_hashResultオブジェクトにハッシュの配列を返すメソッドがあります。次に、それをマッピングして、記号化されたハッシュに変換できます。

# Get an array of hashes representing the result (column => value):
result.to_hash
# => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
      {"id" => 2, "title" => "title_2", "body" => "body_2"},
      ...
     ]

result.to_hash.map(&:symbolize_keys)
# => [{:id => 1, :title => "title_1", :body => "body_1"},
      {:id => 2, :title => "title_2", :body => "body_2"},
      ...
     ]

詳細については、ActiveRecord::Result のドキュメントを参照してください

于 2016-06-20T19:33:45.203 に答える