2012-05-14 36 views
6

Dưới đây là các hiệp hội của tôi:Làm thế nào để sắp xếp theo cột created_at của hiệp hội trong đường ray?

Class Post 
belongs_to :user 
has_many :favorites, :dependent => :destroy 
has_many :favoriters, :through => :favorites, :source => :user 
end 

Class User 
has_many :posts 
has_many :favorites, :dependent => :destroy 
has_many :favorited, :through => :favorites, :source => :post 
end 

Class Favorites 
belongs_to :user, :post 
end 

Tôi muốn sắp xếp bài viết yêu thích của người sử dụng bằng cách cột created_at của hiệp hội yêu thích. Tuy nhiên, điều này sắp xếp theo thuộc tính Post created_at, không phải thuộc tính Favorites created_at. Làm thế nào tôi có thể sắp xếp theo thuộc tính Favorites created_at?

@[email protected]('created_at DESC') 
+0

Bạn có thể nói lại câu hỏi của bạn? – beck03076

Trả lời

15

Bạn cần chỉ định bảng nào bạn muốn sử dụng theo thứ tự theo mệnh đề.

@posts = @user.favorited.order('posts.created_at DESC') 

nên làm điều đó.

Một mẹo hay là sử dụng bảng điều khiển đường ray khi kiểm tra các liên kết. Cụ thể, nó giúp sử dụng phương pháp 'to_sql' trên truy vấn Bản ghi Hoạt động mà bạn đang thực hiện.

Ví dụ:

% bundle exec rails console 

> u = User.last 
> u.favorited.order('created_at DESC').to_sql 
+0

Tuyệt vời, hoạt động. Tuy nhiên, trong trường hợp của tôi, @posts = @ user.favorited.order ('favorites.created_at DESC') để chúng được sắp xếp theo thuộc tính created_at yêu thích. Cám ơn vì sự gợi ý. –

+0

dường như không hoạt động tốt, đã thực hiện chỉnh sửa với nhiều thông tin hơn –

3

sử dụng này trong bài mô hình của bạn cho bộ thứ tự mặc định:

default_scope { order("created_at DESC") } 
Các vấn đề liên quan