কীভাবে অ্যাক্টিভেকর্ড ফলাফলগুলি হ্যাশগুলির একটি অ্যারে রূপান্তর করবেন


112

আমার সন্ধানের অপারেশনের একটি অ্যাক্টিভেকর্ড ফলাফল:

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

যাতে আমি অ্যারের মাধ্যমে পুনরাবৃত্তি করতে এবং হ্যাশগুলিতে আরও উপাদান যুক্ত করতে এবং পরে JSONআমার এপিআই প্রতিক্রিয়াটির জন্য ফলাফলকে রূপান্তর করতে সক্ষম হব । কিভাবে আমি এটি করতে পারব?


আরও দেখুন stackoverflow.com/q/20794398/165673
Yarin

উত্তর:


210

as_json

আপনার এমন 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

serializable_hash

আপনি যে কোনও অ্যাক্টিভেকর্ড অবজেক্টকে হ্যাশ দিয়ে হ্যাশে serializable_hashরূপান্তর করতে পারেন এবং যে কোনও অ্যাক্টিভেকর্ড ফলাফলকে একটি অ্যারেতে রূপান্তর করতে পারেন to_a, উদাহরণস্বরূপ:

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

এবং যদি আপনি V2.3 এর আগে রেলের জন্য একটি কদর্য সমাধান চান

JSON.parse(tasks_records.to_json) # please don't do it

4
+1 সিরিয়ালাইজেবল_হ্যাশ প্রস্তাব দেওয়ার জন্য - এটি প্রথম বারের মতো উত্তর এসেছে যা এর উল্লেখ রয়েছে। দুঃখজনকভাবে আমি বর্তমানে শেষ JSON সমাধানটি ব্যবহার করছি, তবে এখন সিরিয়ালাইজেবল_হ্যাশ ব্যবহার করে দেখব। আমি কেবল প্রতিটি রেকর্ডের সাথে শ্রেণীর নাম কীভাবে অন্তর্ভুক্ত করব তা সন্ধান করতে হবে, আপনি জেএসওএন-এ রুট অন্তর্ভুক্ত করলে আপনি পেতে পারেন।
ডোম

@Dom 웃 আমি সঠিকভাবে এই দেখতে বুঝতে পারেন: stackoverflow.com/questions/17090891/...
hdorio

@ ডোম নীচে আমার উত্তর দেখুন।
ফ্রেডরিক ই

আর একটি সম্ভাব্য উপায় tasks_records = TaskStoreStatus.all.map(&:attributes)
রিগো

এখানে উপর সত্যিই মহান সমাধান, কিন্তু আমার প্রশ্ন করা যেতে পারে যেকোন একটি ব্যবহার করে লাভ কি .as_json, &:serializable_hashএবং &:attributes? এটির সাথে কি অ্যাক্টিভেকর্ড সহায়ক বা সরাসরি কর্মক্ষমতা রয়েছে? আগাম ধন্যবাদ! @ ডোম @ রিগো @ ফ্রেড্রিক ই
এলেক্সিভেন্টুরিও


9

বর্তমান অ্যাক্টিভেকর্ডের (৪.২.৪+) অবজেক্টে এমন একটি পদ্ধতি to_hashরয়েছে যা Resultহ্যাশের একটি অ্যারে প্রদান করে। তারপরে আপনি এটির উপরে মানচিত্র তৈরি করতে এবং প্রতীকী হ্যাশগুলিতে রূপান্তর করতে পারেন:

# 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"},
      ...
     ]

অ্যাক্টিভেকর্ড :: আরও তথ্যের জন্য ফলাফল ডক্স দেখুন


এর থেকে সহজ এবং পরিষ্কার হতে পারে না। আপনাকে অনেক ধন্যবাদ.
ডাব্লুএম

1
যদি আপনার অ্যাক্টিভেকর্ডের সংস্করণ to_hashপদ্ধতিটি স্বীকৃতি না দেয় তবে একটি নোট : to_aryপরিবর্তে চেষ্টা করুন। আশ্চর্যজনকভাবে এটি আমার পক্ষে কাজ করেছিল।
ফিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.