我对 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 都有一个。问题是流程永远不会进入异常。如果@products_with_valid_offers 是 MySQL 中的 SQL 错误,则永远不要进入救援块执行 PostgreSQL 行,它会返回错误。
一些帮助,请?:D