Pertanyaan ActiveRecord menemukan dan hanya mengembalikan kolom yang dipilih


sunting 2

Jika Anda tersandung ini, periksa kedua jawaban seperti yang saya sekarang gunakan untuk memetik ini


Saya memiliki kumpulan data kustom yang cukup besar yang ingin saya kembalikan sebagai json. Satu bagian adalah:

l=Location.find(row.id)
tmp[row.id]=l

tapi saya ingin melakukan sesuatu seperti:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

tetapi ini sepertinya tidak berhasil. Bagaimana cara saya membuatnya bekerja?

Terima kasih

sunting 1
alternatifnya, adakah cara agar saya bisa memberikan array hanya atribut yang ingin saya sertakan?


75
2017-10-27 02:09


asal


Jawaban:


Di Rails 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

...atau...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

Dokumen referensi ini memberi Anda seluruh daftar opsi yang dapat Anda gunakan .find, termasuk cara membatasi berdasarkan nomor, id, atau kolom / kendala lain yang sewenang-wenang.

Di Rails 3 w / Antarmuka Query ActiveRecord

l = Location.where(["id = ?", id]).select("name, website, city").first

Ref: Antarmuka Kueri Rekaman Aktif

Anda juga dapat menukar urutan panggilan yang dirantai ini, lakukan .select(...).where(...).first - Semua panggilan ini lakukan adalah membangun query SQL dan kemudian mengirimkannya.


77
2017-10-27 02:12



mencabut (nama_kolom)

Metode ini dirancang untuk melakukan pilih oleh satu kolom sebagai SQL direct query Returns Array dengan nilai-nilai dari nama kolom yang ditentukan Nilai-nilai memiliki tipe data yang sama seperti kolom.

Contoh:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

Lihat http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

Rel diperkenalkannya 3.2 dan seterusnya dan hanya menerima satu kolom. Di rel 4, ia menerima beberapa kolom


185
2017-10-11 16:30



Jawaban saya datang cukup terlambat karena saya seorang pengembang yang cukup baru. Saya pikir apa yang teman saya cari adalah ini:

Location.select(:name, :website, :city).find(row.id)

Btw, ini Rel 4


7
2017-07-07 16:43