查找“鬼”孩子的记录

时间:2018-06-14 17:54:35

标签: ruby-on-rails activerecord

我有Box和Toy实体。

class Box < ApplicationRecord
  has_one :toy
end

class Toy < ApplicationRecord
  belongs_to :box
end

某些东西损坏了我的数据,一些玩具被删除了。 如何选择所有已经存在玩具链接的Box不再存在?

我可以编写复杂的SQL,但是想要感觉Rails魔术可以做类似的事情:

Box.where(toy: does_not_exist_any_more)

返回的框在toy_id字段中应该不是nil而是数字,而id = 数字

的玩具中没有记录

1 个答案:

答案 0 :(得分:0)

尝试:

<input type="text"
           class="form-control"
           required minlength="3"
           name="name"
           placeholder="Search for people..."
           formControlName="name"
           [(ngModel)]="name"
           typeaheadOptionField="name"
           [typeahead]="clanEmitter"
           [typeaheadScrollable]="true"
           [typeaheadAsync]="true"
           (typeaheadLoading)="changeTypeaheadLoading($event)">

这:

Box.where.not(id: Toy.all.pluck(:box_id))

将为您提供Toy.all.pluck(:box_id) 的任何实例引用的所有Box个ID。

然后这个:

Toy

将为您提供Box.where.not(id: Toy.all.pluck(:box_id)) 的某些实例当前未引用的所有框。