Rails包含条件多态关联

时间:2016-11-07 01:41:29

标签: ruby-on-rails left-join polymorphic-associations

我有一个多态关联: 跟随来自rails guide的rails关联模型图片并假设员工是我的内容和图片是我的翻译我需要执行过滤关联。

enter image description here

class Content < ApplicationRecord
  has_many :translations,:as => :transl
end

class Translation < ApplicationRecord
   enum idiom: [ :EN, :NO]
   belongs_to :transl, :polymorphic => true
end

因此,我希望有一个json与我的内容,但只有特定的习惯用法,我有这样的东西:

 Content.all.to_json(:include => {:translations => {:only => [:text, :idiom],:where =>{idiom: "EN"}}})

我尝试创建一个包含在to_json中的方法,但其中的方法只是getter。

我试过也离开了外连接,但它也不起作用:

SELECT "contents".* FROM "contents" LEFT OUTER JOIN "translations" ON "translations"."transl_id" = "contents"."id"  WHERE (translations.idiom=0)

要工作,我必须执行原始查询,强制从左侧获得一些结果我认为可能有一些内容没有翻译,例如:

SELECT "contents".* FROM "contents" LEFT OUTER JOIN "translations" ON  "contents"."id"  = "translations"."transl_id" **OR "contents"."id" >0**  WHERE (translations.idiom="EN")

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

SELECT“contents”。 FROM“contents”LEFT OUTER JOIN“translations”ON“contents”。“id”=“translations”。“transl_id” OR“contents”。“ id“&gt; 0 WHERE(translations.idiom =”EN“)*

可以是===&gt;

@lang="EN"
Content.where(:id > 0).includes(:translations).where({:translations =>{:idiom=>@lang}})