2012-02-04 28 views

Trả lời

76

Cách tốt nhất là nên có cơ sở dữ liệu của bạn làm điều đó, nhưng nếu bạn muốn sử dụng Ruby:

@games = @data.sort_by {|x| [x.game_date, x.team] } 

Các hành vi sắp xếp của Array là để sắp xếp theo các thành viên đầu tiên, sau đó các thứ hai, sau đó là thứ ba, v.v. Vì bạn muốn ngày đó là khóa chính của bạn và nhóm làm thứ hai, một mảng của hai khóa đó sẽ sắp xếp theo cách bạn muốn.

+0

Vấn đề là người dùng có-nhiều đội bóng và một đội bóng có-nhiều trò chơi, vì vậy tôi không chắc chắn làm thế nào để điều hướng xuống cấp độ trò chơi, vì vậy im không chắc chắn làm thế nào để làm điều này trên cấp db? – Kamilski81

+4

Có cách nào để chỉ định hướng cho từng phím đó không? – mehulkar

+0

@ daniel-pittman cảm ơn! Ngoài ra, bạn có thể sắp xếp theo vài phím '@games = @ data.sort_by {| x, y | [x.game_date, y.name]} ' –

22
@teams = @user.teams 
@games = @teams.games.order("game_date ASC, team ASC") 
+0

@teams là một mảng hoặc một mối quan hệ. Nó có phương pháp 'trò chơi' như thế nào? – Swards

+0

Xin cảm ơn vì phản hồi này, nó đã giải quyết vấn đề của tôi bằng cách sử dụng: @service_history = @ vehicle.services.order ("đóng ASC, date_closed DESC") xử lý việc đặt nils trước, sau đó là ngày desc. – jared

+1

Tôi nghĩ rằng điều này là tốt hơn vì nó sẽ sử dụng thứ tự SQL nếu có thể, nhanh hơn sắp xếp một mảng và hoạt động tốt hơn với phân trang. Đúng? – light24bulbs

2

Giả sử bạn có một mô hình có hai lĩnh vực này

Model.all (: trật tự => 'attribute1, attribute2')

Trong trường hợp các lĩnh vực trong nhiều bảng, bạn có thể sử dụng tham gia.

0

Đối với những người muốn sắp xếp một mảng chứa hai đối tượng khác nhau với một trường ngày tháng được đặt tên khác, bạn có thể thực hiện điều này bằng một phương thức bí danh thuộc tính trong mô hình.

lưu ý: using .sort_by! destructively không hoạt động.

News.rb

def release_date 
    self.publish_date 
end 

khiển

@grid_elements = @news + @albums 
@grid_elements = @grid_elements.sort_by(&:release_date) 
4
@teams = @user.teams 
@games = @teams.games.order(game_date: :asc, team: :asc) 
Các vấn đề liên quan