第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Rails 4可以找到?jīng)]有孩子的父母

Rails 4可以找到?jīng)]有孩子的父母

函數(shù)式編程 2019-08-28 09:38:15
Rails 4可以找到?jīng)]有孩子的父母我找到了一個(gè)答案,其中有一些可用的having例子可以找到有n孩子的父母,但同樣不能用于找到?jīng)]有孩子的父母(大概是因?yàn)檫B接不包括他們)。scope :with_children, joins(:children).group("child_join_table.parent_id").having("count(child_join_table.parent_id) > 0")誰能指出我正確的方向?
查看完整描述

3 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊

這應(yīng)該做你想要的工作:

Rails 3和4

scope :without_children, includes(:children).where(:children => { :id => nil })

這里的最大區(qū)別是joins成為a includes:一個(gè)include加載所有關(guān)系,如果它們存在,則join將僅加載關(guān)聯(lián)的對(duì)象并忽略沒有關(guān)系的對(duì)象。

事實(shí)上,scope :with_children, joins(:children)應(yīng)該足以讓父母至少回到1個(gè)孩子。試試看!

Rails 5

請(qǐng)參閱下面的@ Anson的回答


正如@MauroDias所指出的,如果它是你父母和孩子之間的自我指涉關(guān)系,那么上面的代碼將不起作用。

通過一些研究,我發(fā)現(xiàn)了如何做到這一點(diǎn):

考慮這個(gè)模型:

class Item < ActiveRecord::Base
  has_many :children, :class_name => 'Item', :foreign_key => 'parent_id'

如何返回沒有孩子的所有項(xiàng)目(ren):

Item.includes(:children).where(children_items: { id: nil })

我怎么找那張children_items桌子的?

Item.joins(:children) 生成以下SQL:

SELECT "items".* FROM "items" 
 INNER JOIN "items" "children_items" 
 ON "children_items"."parent_id" = "items"."id"

所以我猜測(cè)Rails在自引用的情況下需要JOIN時(shí)使用表。


查看完整回答
反對(duì) 回復(fù) 2019-08-28
?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

有一個(gè)堅(jiān)實(shí)的Rails 4答案,但是對(duì)于那些來到Rails 5的人來說,你有更多的選擇。

使用Rails 5:

從Rails 5開始,您還可以使用left_outer_joins來避免加載關(guān)聯(lián)。它是在拉取請(qǐng)求#12071中引入的。

scope :without_children, left_outer_joins(:children).where(children: { id: nil })

對(duì)于有孩子的父母,MrYoshiji的Rails 4解決方案仍然可以使用:

scope :with_children, joins(:children)


查看完整回答
反對(duì) 回復(fù) 2019-08-28
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

這就是我為Rails 5解決它的方法:

scope :without_comments, -> do
  left_outer_joins(:comments).where(comments: { id: nil })end


查看完整回答
反對(duì) 回復(fù) 2019-08-28
  • 3 回答
  • 0 關(guān)注
  • 552 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)