我有两种型号:
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呢?
我相信Product.joins(gender: :translations).where(gender: { translations: { name: 'male' }})
应该有一些类似的东西。
joins(gender: :translations)
是一个嵌套的内部联接。所以您加入了products
->genders
和genders
->gender_translations
。
where
散列语法只是尝试生成SQL:where("gender_translations.prompt = 'male'")
。如果散列语法不正确/对您不利,我会恢复到刚才提到的原始SQL。无论如何,它可以说更清楚!