Tôi đang tìm kiếm một ví dụ Rails 4 rõ ràng về cách lọc các bản ghi dựa trên dữ liệu liên quan đến chúng thông qua một bảng khác.Rails Query: Lọc theo thuộc tính trong bảng khác
Giả sử tôi có mô hình Người dùng và mô hình Nhận xét. Người dùng has_many
nhận xét và nhận xét belongs_to
người dùng. Nhận xét cũng có cột score
trong bảng của nó.
class User < ActiveRecord::Base
has_many :comments
end
Users
| id | name | email |
|-----|---------|---------------------|
| 1 | "Alice" | "[email protected]" |
| 2 | "Bob" | "[email protected]" |
| ... |
class Comment < ActiveRecord::Base
belongs_to :user
end
Comments
| id | score | content | user_id |
|-----|-------|------------------|---------|
| 1 | 0 | "lol" | 2 |
| 2 | 2 | "more like love" | 3 |
| ... |
Làm thế nào tôi có thể có được tất cả người dùng đã thực hiện một bình luận với nội dung "k" mà có một số điểm> 0? Lưu ý rằng những gì tôi muốn trả lại là Người dùng, không phải là Nhận xét.
Ngoài ra, hãy xem xét một ví dụ phức tạp hơn, trong đó một người dùng has_many
ý kiến và thích, nhận xét belong_to
một người sử dụng, và một Nhận xét has_many
Likes. Thích belong_to
một Người dùng và belong_to
một Nhận xét. Lưu ý rằng score
không còn là một yếu tố trong ví dụ này.
class User < ActiveRecord::Base
has_many :comments
has_many :likes
end
Users
| id | name | email |
|-----|---------|---------------------|
| 1 | "Alice" | "[email protected]" |
| 2 | "Bob" | "[email protected]" |
| ... |
class Comment < ActiveRecord::Base
belongs_to :user
has_many :likes
end
Comments
| id | content | user_id |
|-----|------------------|---------|
| 1 | "lol" | 2 |
| 2 | "more like love" | 3 |
| ... |
class Like < ActiveRecord::Base
belongs_to :user
belongs_to :comment
end
Likes
| id | user_id | comment_id |
|-----|---------|------------|
| 1 | 1 | 2 |
| 2 | 4 | 3 |
| ... |
Trong ví dụ thứ hai này, làm thế nào tôi sẽ tìm thấy tất cả các Người sử dụng có bao giờ đã một trong những ý kiến của họ thích bởi người dùng có tên là 'Fonzie'?