我有這個範圍,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')"
對作用域的結果使用`to_sql`方法並查看兩個SQL語句之間的區別。你加入了3張表。 「訂閱者」表在哪裏來自您的條件? – Zabba 2011-02-08 07:20:12
我在我的本地機器的控制檯和heroku上運行了to_sql,它給出了相同的結果。看到我上面的更新。 – 2011-02-08 10:26:36