Câu hỏi ActiveRecord tìm và chỉ trả về các cột đã chọn


chỉnh sửa 2

Nếu bạn tình cờ gặp vấn đề này, hãy kiểm tra cả hai câu trả lời như tôi đang sử dụng


Tôi có một tập dữ liệu tùy chỉnh khá lớn mà tôi muốn trở lại để được echoe'd ra như json. Một phần là:

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

nhưng tôi muốn làm một cái gì đó như:

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

nhưng điều này dường như không hoạt động. Làm thế nào tôi có được điều này để làm việc?

cám ơn

chỉnh sửa 1
cách khác, có cách nào để tôi có thể truyền một mảng chỉ các thuộc tính mà tôi muốn đưa vào không?


75
2017-10-27 02:09


gốc




Các câu trả lời:


Trong Rails 2

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

...hoặc là...

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

Tài liệu tham chiếu này cung cấp cho bạn toàn bộ danh sách các tùy chọn mà bạn có thể sử dụng .find, bao gồm cách giới hạn theo số, id hoặc bất kỳ cột / ràng buộc tùy ý nào khác.

Trong Rails 3 w / Giao diện truy vấn ActiveRecord

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

Tham khảo: Giao diện truy vấn hồ sơ hoạt động

Bạn cũng có thể hoán đổi thứ tự của các cuộc gọi này, .select(...).where(...).first - tất cả các cuộc gọi này là xây dựng truy vấn SQL và sau đó gửi nó đi.


77
2017-10-27 02:12



nhưng tôi chỉ muốn một cá thể không phải là tất cả - timpone
Tôi đã chỉnh sửa câu trả lời của mình. :limit nên làm điều này, hoặc :first hoặc là :last hoặc bất cứ điều gì, tùy thuộc vào những gì bạn muốn. Tài liệu tham chiếu mà tôi đã liên kết sẽ cho bạn biết cách thực hiện tất cả những điều đó. - jefflunt
Đã cập nhật để bao gồm cách thực hiện truy vấn tương đương trong Rails 3. - jefflunt


nhổ (column_name)

Phương thức này được thiết kế để thực hiện chọn một cột đơn dưới dạng truy vấn SQL trực tiếp Trả về mảng với các giá trị của tên cột được chỉ định Các giá trị có cùng kiểu dữ liệu như cột.

Ví dụ:

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)

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

Đường ray được giới thiệu 3.2 trở đi và chỉ chấp nhận cột đơn. Trong đường ray 4, nó chấp nhận nhiều cột


185
2017-10-11 16:30



guides.rubyonrails.org/active_record_querying.html#pluck - Alan David Garcia
OK, nhổ với nhiều cột là tuyệt vời .. chỉ học được rằng trên câu trả lời này. Rails 3 mặc dù cần câu trả lời được chấp nhận. - Jay Shepherd
Câu trả lời được chấp nhận là nguyên nhân chính xác không có sẵn. - prasad.surase
Tại sao đây không phải là câu trả lời đúng? - isaacsloan
Model.uniq bây giờ là Model.distinct (ít nhất là trong Rails 5). - mrturtle


Câu trả lời của tôi khá muộn vì tôi là một nhà phát triển khá mới. Tôi nghĩ những gì bạn tôi đang tìm kiếm là:

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

Btw, đây là Rails 4


7
2017-07-07 16:43



@mikias câu trả lời của tôi là dành cho Rails 4 - tkhuynh