検索操作の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" }
配列を反復処理して、ハッシュに要素を追加し、後でAPI応答の結果をJSON
に変換できるようにします。これどうやってするの?
ActiveRecordオブジェクトを名前にかかわらずRubyハッシュに変換するas_json
メソッドを使用する必要があります
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
また、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
多分?
result.map(&:attributes)
シンボルキーが必要な場合:
result.map { |r| r.attributes.symbolize_keys }
現在のActiveRecord(4.2.4+)には、ハッシュ配列を返すResult
オブジェクトにto_hash
メソッドがあります。その後、その上にマッピングして、シンボル化されたハッシュに変換できます。
# 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"},
...
]