0

我有 2 个模型:

class Gender < ActiveRecord::Base
  translates :name
  has_many :products
end

class Product < ActiveRecord::Base
  translates :description
  belongs_to :gender 
end

与 globalize3 集成后,我无法弄清楚如何获取加入工作的查询,例如: Product.joins(:gender).where(genders: { name: 'male' })

生成这个 sql 查询:

SELECT "products".* FROM "products" 
INNER JOIN "genders" ON "genders"."id" = "products"."gender_id" 
WHERE "genders"."name" = 'male'`

但我想我需要一个看起来像这样的 sql 查询?

SELECT * FROM products 
INNER JOIN genders on genders.id = products.gender_id 
INNER JOIN gender_translations on gender_translations.gender_id = genders.id 
WHERE gender_translations.name = 'male';

那么如何做这个 sql 查询的 rails 等效项呢?

4

1 回答 1

0

Product.joins(gender: :translations).where(gender: { translations: { name: 'male' }})我相信类似的东西应该可以解决问题。

joins(gender: :translations)是一个嵌套的内部连接。所以你加入products->gendersgenders-> gender_translations

where哈希语法只是尝试生成 SQL : where("gender_translations.prompt = 'male'")。如果哈希语法不正确/与您作斗争,我将恢复到刚才提到的原始 SQL。无论如何,它可以说更清楚!

于 2014-11-16T05:42:08.390 回答