Làm thế nào để bạn thực hiện truy vấn or
trong Rails 5 ActiveRecord? Ngoài ra, bạn có thể chuỗi or
với where
trong truy vấn ActiveRecord không?Rails 5: ActiveRecord HOẶC truy vấn
Trả lời
Khả năng chuỗi or
khoản cùng với where
điều khoản trong ActiveRecord
truy vấn sẽ có mặt tại Rails 5. Xem related discussion and the pull request.
Vì vậy, bạn sẽ có thể làm những điều sau đây trong Rails 5:
Để có được một post
với id
1 hoặc 2:
Post.where('id = 1').or(Post.where('id = 2'))
Một số ví dụ khác:
(A & & B) || C:
Post.where(a).where(b).or(Post.where(c))
(Một || B) & & C:
Post.where(a).or(Post.where(b)).where(c)
Làm cách nào để nhận được (A || B) && (C || D). Tôi đã thử Post.where (a) .or (Post.where (b)). Nơi (c) .ho (Post.where (d)) nhưng Nó sản xuất như sau: (A || B) && C || D – Imran
@Imran tôi tin rằng nó sẽ là 'Post.where (a) .or (Post.where (b)). Where (Post.where (c) .or (Post.where (d)))' điều này sẽ tạo ra (a || b) && (c || d) – engineersmnky
tôi cần phải làm một (A && B) || (C && D) || (E && F)
Nhưng trong tình trạng hiện Rails 5.1.4
's này có được của quá phức tạp để hoàn thành với Arel hoặc chuỗi. Nhưng tôi vẫn muốn sử dụng Rails để tạo càng nhiều truy vấn càng tốt.
Vì vậy, tôi đã thực hiện một hack nhỏ:
Trong mô hình của tôi, tôi đã tạo ra một tin phương pháp gọi là sql_where
:
private
def self.sql_where(*args)
sql = self.unscoped.where(*args).to_sql
match = sql.match(/WHERE\s(.*)$/)
"(#{match[1]})"
end
Tiếp theo trong phạm vi của tôi, tôi đã tạo ra một mảng để chứa của HOẶC
scope :whatever, -> {
ors = []
ors << sql_where(A, B)
ors << sql_where(C, D)
ors << sql_where(E, F)
# Now just combine the stumps:
where(ors.join(' OR '))
}
Điều này sẽ tạo ra kết quả truy vấn mong đợi: SELECT * FROM `models` WHERE ((A AND B) OR (C AND D) OR (E AND F))
.
Và bây giờ tôi có thể dễ dàng kết hợp điều này với các phạm vi khác, v.v. mà không có bất kỳ sai OR nào.
Vẻ đẹp là sql_where của tôi lấy đối số bình thường ở mệnh đề: sql_where(name: 'John', role: 'admin')
sẽ tạo ra (name = 'John' AND role = 'admin')
.
- 1. Rails ActiveRecord Tạo hoặc Tìm
- 2. Rails 4, truy vấn thô sử dụng ActiveRecord
- 3. Safe ActiveRecord như truy vấn
- 4. Truy vấn phụ ActiveRecord Yii
- 5. Lọc truy vấn ActiveRecord trong đường ray
- 6. Rails, ActiveRecord, id truy vấn trong mảng ints, giữ trật tự của mảng đã qua
- 7. Hiệu quả ActiveRecord has_and_belongs_to_many truy vấn
- 8. phủ nhận ActiveRecord phạm vi truy vấn
- 9. Sử dụng Rails ActiveRecord để truy vấn đối tượng chưa được lưu
- 10. Rails 3 Truy vấn ActiveRecord sử dụng cả hai toán tử SQL IN và SQL OR
- 11. Truy vấn 5 năm qua
- 12. Ruby on Rails Truy vấn ActiveRecord bằng cách sử dụng một tham gia
- 13. Rails ActiveRecord Thực Group, Sum và Đếm trong một truy vấn
- 14. Rails ActiveRecord: Là kết hợp: bao gồm và: điều kiện truy vấn có thể?
- 15. Rails truy vấn activerecord so sánh hai thuộc tính của cùng một bản ghi
- 16. Rails Activerecord Relation: sử dụng truy vấn con dưới dạng bảng cho câu lệnh chọn SQL
- 17. chèn hoặc tăng nguyên tử trong ActiveRecord/Rails
- 18. Hoặc & và trong Rails ActiveRecord mệnh đề where
- 19. Upsert in Rails ActiveRecord
- 20. Cách sử dụng điều kiện OR trong truy vấn ActiveRecord
- 21. ActiveRecord HOẶC ký hiệu
- 22. Rails ActiveRecord Model Danh sách liên kết
- 23. Phân trang truy vấn ActiveRecord bị xáo trộn
- 24. Thoát ký tự '@' trong truy vấn SQL/ActiveRecord
- 25. Truy vấn ActiveRecord chậm hơn nhiều so với SQL thẳng?
- 26. trả lại truy vấn tùy chỉnh chọn trong activerecord
- 27. ĐƠN VỊ SQL với Rails ActiveRecord
- 28. Lucene "Hoặc Truy vấn"
- 29. Rails first_or_create Phương thức ActiveRecord
- 30. Rails ActiveRecord nhiều bảng bao gồm
[Có thể trợ giúp] (http://stackoverflow.com/q/31096009/3444240) – potashin