私はRailsに比較的慣れていないので、問題を解決する方法が正しいかどうかはわかりませんが、いくつか問題があります
私の PC には MySQL がインストールされていますが、Heroku は PostgreSQL を使用しているため、特定の問題で両方の DBMS で動作するソリューションを設計しています。
私は次のコードを持っています:
begin
@products_with_valid_offers = Product.joins(:variants).active.discount_valid.discount_date_valid_mySQL
rescue ActiveRecord::StatementInvalid
@products_with_valid_offers = Product.joins(:variants).active.discount_valid.discount_date_valid_postgreSQL
end
スコープは次のとおりです。
scope :active, includes([:assets, :store]).where(:active => true, :deleted_at => nil, :stores => { :deleted_at => nil, :active => true }).order("products.created_at DESC")
scope :discount_date_valid_mySQL, where('DATE_FORMAT(NOW(),"%Y-%m-%d 23:59:59") + '" BETWEEN discount_from AND discount_to')
scope :discount_date_valid_postgreSQL, where('now()::date BETWEEN discount_from AND discount_to')
ご覧のとおり、日付形式を管理するには、DBMS ごとに 1 つずつ、2 つの異なるフォームが必要です。問題は、フローが例外に入らないことです。@products_with_valid_offers が MySQL の SQL エラーの場合、レスキュー ブロックに入って PostgreSQL 行を実行することはなく、エラーが返されます。
助けてください。:D