2011-02-08 38 views
1

我有這個範圍,Subscriber.rb:爲什麼我在Heroku上使用範圍而不是在本地機器上獲得重複結果?

scope :notify_today, 
joins(:skills => :positions). 
where('positions.created_at > subscribers.created_at AND positions.created_at > ?', 1.day.ago) 

在我的本地機器,它工作正常,但在Heroku它返回每個對象兩次。

我設法與一組修復:

scope :notify_today, 
joins(:skills => :positions). 
where('positions.created_at > subscribers.created_at AND positions.created_at > ?', 1.day.ago). 
group('subscribers.email, subscribers.id, subscribers.last_email_at, subscribers.created_at, subscribers.updated_at') 

我只是想知道這是否是解決它的正確方法,以及爲什麼Heroku的複製的結果?

編輯:

數據庫關聯:

Subscriber 
has_and_belongs_to_many :skills 

Skill 
has_and_belongs_to_many :subscribers 
has_many :positions 

Position 
belongs_to :skill 

我使用隨Rails提供的默認數據庫。

Subscriber.notify_today.to_sql給我的本地機器的Heroku上和同樣的事情:

"SELECT \"subscribers\".* 
    FROM \"subscribers\" 
    INNER JOIN \"skills_subscribers\" ON \"skills_subscribers\".\"subscriber_id\" = \"subscribers\".\"id\" 
    INNER JOIN \"skills\" ON \"skills\".\"id\" = \"skills_subscribers\".\"skill_id\" 
    INNER JOIN \"positions\" ON \"positions\".\"skill_id\" = \"skills\".\"id\" 
    WHERE (positions.created_at > subscribers.created_at AND positions.created_at > '2011-02-07 10:15:27.098261')" 
+1

對作用域的結果使用`to_sql`方法並查看兩個SQL語句之間的區別。你加入了3張表。 「訂閱者」表在哪裏來自您的條件? – Zabba 2011-02-08 07:20:12

+0

我在我的本地機器的控制檯和heroku上運行了to_sql,它給出了相同的結果。看到我上面的更新。 – 2011-02-08 10:26:36

回答

0

提斯奇怪,你在本地得到不同的結果。只是猜測,Heroku默認使用postgresql數據庫,即使你在你的database.yml中指定了其他的東西,我相信。

這可能是你的本地數據庫瞭解您的SQL不同到PostgreSQL或不同的連接表..

你在本地機器上使用的是什麼數據庫?

+0

Heroku忽略database.yml並使用Postgres,除非啓用RDS插件。 – 2011-02-08 08:03:42

0

需要查看訂閱者,技能和職位之間的關聯。

您是否確實想要使用嵌套關聯進行連接,或者您是否想要在多個關聯中執行訂閱者連接,joins(:skills, :positions)

相關問題