2009-03-16 50 views
10

Tôi có một danh sách các đối tượng 'yêu cầu', mỗi đối tượng có phẩm chất activerecord khá bình thường. Bảng yêu cầu có liên quan đến bảng trò chơi với bảng tham gia, 'games_requests,' để yêu cầu có mảng request.games.Đường ray: Làm cách nào để tìm() tất cả các bản ghi duy nhất trong các trường nhất định?

Câu hỏi đặt ra là, có cách nào để thực hiện tìm kiếm cho n yêu cầu duy nhất cuối cùng không, tính duy nhất được xác định bởi cột trò chơi và một số khác, nhưng đặc biệt bỏ qua các colums khác (như tên của người dùng yêu cầu?)

Tôi thấy cú pháp như 'tìm (: tất cả,: giới hạn => 5,: include => [: trò chơi,: giai đoạn])' nhưng đã trả về các từ khóa trùng lặp.

Cảm ơn ...

EDIT: Cảm ơn sự hỗn loạn cho một phản ứng tuyệt vời. Bạn đã cho tôi thực sự gần gũi, nhưng tôi vẫn cần trả về là đối tượng yêu cầu hợp lệ: 5 bản ghi đầu tiên khác biệt trong các hàng được yêu cầu. Tôi chỉ có thể sử dụng tìm thấy khi bạn xây dựng nó và sau đó thực hiện tìm kiếm thứ hai cho hàng đầu tiên trong bảng khớp với từng bộ được trả về bởi lần tìm đầu tiên.

EDIT:

Games.find(
    :all, :limit => 5, 
    :include => [:games, :requests], 
    :group => 'games, whatever, whatever_else' 
) 

... cung cấp cho một lỗi SQL:

Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games 

tôi đã thực hiện một vài thay đổi cho những gì tôi giả định là chính xác cho dự án của tôi; nhận danh sách yêu cầu thay vì trò chơi, v.v.:

Request.find(
    :all, :order=>"id DESC", :limit=>5, 
    :include=>[:games], #including requests here generates an sql error 
    :group=>'games, etc' #mysql error: games isn't an attribute of requests 
    :conditions=>'etc' 
) 

Tôi nghĩ mình sẽ phải sử dụng tùy chọn: join => tại đây.

Trả lời

8
Games.find(
    :all, :limit => 5, 
    :include => [:games, :requests], 
    :group => 'games, whatever, whatever_else' 
) 
+0

này trả về các trò chơi, bất cứ điều gì, và các cột whatever_else. Có cách nào để trả về các đối tượng yêu cầu hoàn chỉnh, chỉ loại bỏ các đối tượng không có tính duy nhất trong các cột này không? – Sniggerfardimungus

+0

Vâng. Đã chỉnh sửa cho mỗi. – chaos

+0

Hrm. Có vấn đề với 'trò chơi' là thuộc tính ảo thông qua bảng tham gia. (xem câu hỏi đã chỉnh sửa) – Sniggerfardimungus

0

Tôi nghĩ rằng bạn sẽ có thể làm điều này bằng find_by_sql và GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id") 
6

Hãy thử Rails uniq_by.It cũng làm việc với hiệp hội và lợi nhuận mảng.

@document = Model.uniq_by(&:field)

More Detail

+2

Giả sử 'uniq_by' bị khấu hao và được thay thế bằng' uniq'. – Cimm

Các vấn đề liên quan