2012-09-07 53 views
2
@users = User.registred 
     .includes(:items) 
     .joins('LEFT OUTER JOIN items ON users.id=items.user_id') 
     .group(User.column_names.collect do |c| "#{User.table_name}.#{c}" end.join(',')) 
     .order('CASE WHEN LENGTH(users.profile_picture) > 0 THEN 0 ELSE 1 END, followers_count DESC, bibbed_items_count DESC, SUM(items.user_likes_count) DESC, users.id') 

其中registered = where("deactivated_at IS NULL AND last_sign_in_at IS NOT NULL")雷不工作,由於組關鍵字

雷不羣子句工作。如何在此查詢中優化組子句?

+0

我_think_這可以幫助你:http://stackoverflow.com/a/10758361/387135 – Brian

+0

不工作... :( –

+0

我看不到你在哪裏調用'page'方法... – Brian

回答

2

我解決它像這樣

@users = User.registred 
     .includes(:items) 
     .joins('LEFT OUTER JOIN items ON users.id=items.user_id') 
     .group("users.id") 
     .order('CASE WHEN LENGTH(users.profile_picture) > 0 THEN 0 ELSE 1 END, followers_count DESC, bibbed_items_count DESC, SUM(items.user_likes_count) DESC, users.id') 

@users = @users.page(params[:page) 
3

有同樣的問題,固定它像你一樣 - 由group子句中提供一個適當的id值。然而,顯然它並不需要更換原來的組條款 - 只是追加額外的呼叫:

@users = User.registred 
    .includes(:items) 
    .joins('LEFT OUTER JOIN items ON users.id=items.user_id') 
    .group(User.column_names.collect do |c| "#{User.table_name}.#{c}" end.join(',')) 
    .order('CASE WHEN LENGTH(users.profile_picture) > 0 THEN 0 ELSE 1 END, followers_count DESC, bibbed_items_count DESC, SUM(items.user_likes_count) DESC, users.id') 
    .group('users.id') 
+0

你不需要一個新的組子句,如果你把users.id放在第一個子句的末尾,會工作,謝謝你的回答,我只是因爲你而弄明白。 –