0

このイベントメソッドを再集計して簡略化できますか?Rails 3でactiverecordメソッドをリファクタリングする

class Manager < User 
    has_and_belongs_to_many :customers 

    def events 
    Event.joins(:customers => :managers).where(:users => { :id => self }).select("DISTINCT(events.id), events.description, events.created_at") 
    end 

end 

私が現在持っているマネージャーインスタンスの上にクエリを構築することができましたが、これはできないようです。私は次のことを試してみましたが、エラーに

def events 
    customers.joins(:events).select("DISTINCT(events.id), events.description, events.created_at") 
end 

current_user.events 

を得たが、これはMySQLのエラーが発生:

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(events.id), events.description, events.created_at FROM `customers` INNER' at line 1: SELECT `customers`.*, DISTINCT(events.id), events.description, events.created_at FROM `customers` INNER JOIN `customers_events` ON `customers_events`.`customer_id` = `customers`.`id` INNER JOIN `events` ON `events`.`id` = `customers_events`.`event_id` INNER JOIN `customers_managers` ON `customers`.`id` = `customers_managers`.`customer_id` WHERE `customers_managers`.`manager_id` = 27 ORDER BY created_at DESC 
+0

を使用することができ、しかし

customers.select("DISTINCT(events.id), events.description, events.created_at").joins(:events) 

:これを試してみてください少なくともエラーが何であるか、あなたが達成しようとしていることを言うことができます。 – sevenseacat

+0

Karpie - 更新された質問。 – pingu

答えて

0

MySQL manualによると、DISTINCTキーワードが前に来なければなりませんselect_expr:

SELECT foo.*, DISTINCT(foo.id) 

がそのエラーを表示します。

SELECT distinct(foo.id), foo.* 

となります。あなたがやろうとしているすべてのユーザーごとに固有のイベントを取得することである場合は、(私はDISTINCTが何のためにあるのかだと仮定)、あなただけの

current_user.events.group("events.id") 
+0

Thiloの返信をありがとう、残念ながら、私はあなたの最初のソリューションではまったく同じエラーが発生します。また、2番目のソリューションでは、ユーザーが顧客を通じてイベントを受け取るだけでエラーが発生します。 – pingu

+0

まあ、私はあなたのDBもモデル構造も持っていないので、私は正確なソリューションを提供することはできません。要点は、あなたがそれを避けることができるならDISTINCTを使用しないでください - group()を使用してください。 DISTINCTを使用する必要がある場合は、DISTINCTがselectステートメントの最初の部分であるように、アクティブなレコードスコープを連結する方法を見つける必要があります。 – Thilo

+0

私は生成されたSQLを試していますが、問題はSQLの "SELECT' customers'。* "という顧客テーブルが含まれていないためです。 – pingu

関連する問題