我是rails的新手,请原谅这个问题,如果它是愚蠢的:S
我使用Spree作为我选择的电子商务平台。
在Rails控制台中,我运行:
Spree::Product.joins(:product_properties, :taxons, :variants).limit(10)
这将返回sql:
SELECT `spree_products`.* FROM `spree_products` INNER JOIN `spree_product_properties` ON `spree_product_properties`.`product_id` = `spree_products`.`id` INNER JOIN `spree_products_taxons` ON `spree_products_taxons`.`product_id` = `spree_products`.`id` INNER JOIN `spree_taxons` ON `spree_taxons`.`id` = `spree_products_taxons`.`taxon_id` INNER JOIN `spree_variants` ON `spree_variants`.`product_id` = `spree_products`.`id` AND `spree_variants`.is_master = 0 AND `spree_variants`.deleted_at IS NULL LIMIT 10
但是,我需要sql来设置值
`spree_variants`.is_master = 1 AND `spree_variants`.deleted_at IS NOT NULL
有人知道怎么做吗?我试过了
Spree::Product.joins(:product_properties, :taxons, :variants).limit(10).where("`spree_variants`.is_master = 1 AND `spree_variants`.deleted_at IS NOT NULL")
但这不起作用并生成以下sql
SELECT `spree_products`.* FROM `spree_products` INNER JOIN `spree_product_properties` ON `spree_product_properties`.`product_id` = `spree_products`.`id` INNER JOIN `spree_products_taxons` ON `spree_products_taxons`.`product_id` = `spree_products`.`id` INNER JOIN `spree_taxons` ON `spree_taxons`.`id` = `spree_products_taxons`.`taxon_id` INNER JOIN `spree_variants` ON `spree_variants`.`product_id` = `spree_products`.`id` AND `spree_variants`.is_master = 0 AND `spree_variants`.deleted_at IS NULL WHERE (`spree_variants`.is_master = 1 AND `spree_variants`.deleted_at IS NOT NULL) LIMIT 10
谢谢!
答案 0 :(得分:0)
使用squeel gem可以节省大量时间。它广泛使用块,并允许您在纯Ruby上编写(以及其他功能)这样的查询:
.where{(spree_variants.is_master == 1) & (spree_variants.deleted_at != nil)}
注意使用方括号和没有符号。
要使用这些功能,只需将此行添加到Gemfile
:
gem 'squeel'
并运行bundle install
。