【问题标题】:globalize3 - Query translated attributeglobalize3 - 查询翻译属性
【发布时间】:2014-10-15 05:05:06
【问题描述】:

我有 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 等效项呢?

【问题讨论】:

    标签: sql ruby-on-rails ruby activerecord globalize3


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复@dleve123,但Product.joins(gender: :translations).where(gender: { translations: { name: 'male' }}) 正是我在问这个问题时最终所做的,最后我确实在rails 中编写了原始sql,其中的方法就像您建议的那样。也许我稍后会挖掘出旧的错误消息,我们可以从那里看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多