Ruby on rails 如何为has\u many关系编写Rails查找器查询?

Ruby on rails 如何为has\u many关系编写Rails查找器查询?,ruby-on-rails,ruby-on-rails-5,has-many,finder,Ruby On Rails,Ruby On Rails 5,Has Many,Finder,我使用的是Rails 5。我有以下课程 class ParentObject < ApplicationRecord has_and_belongs_to_many :child_objects, :optional => false end 但我犯了这个错误 Unknown primary key for table parent_objects_child_objects in model ParentObject::HABTM_ChildObjects 您可以通过下

我使用的是Rails 5。我有以下课程

class ParentObject < ApplicationRecord
    has_and_belongs_to_many :child_objects, :optional => false
end
但我犯了这个错误

Unknown primary key for table parent_objects_child_objects in model ParentObject::HABTM_ChildObjects

您可以通过下面的查询找到这些寄存器

ParentObject.joins(:child_objects).where('child_objects.id in (?)', child_objects)
其中('child_objects.id in(?),child_objects)#您正在child_objects表中搜索id。指定联接表
子对象.id

这是相同的查询,但更多的是RailsWay。同样的想法

ParentObject.joins(:child_objects).where(child_objects: { id: child_objects} )

根据定义的类,
has_和_belient_to _many
意味着一个父级可以有许多子级,而一个子级可以属于许多父级。这符合多对多关系的条件,因此需要关联(或连接)表

对于上面定义的类,rails将查找
child\u objects\u parent\u objects
,如果表不存在,则引发错误。添加如下定义的连接表

创建表'child\u objects\u parent\u objects`(
`id`int(11)非空自动增量,
`父对象id`int(11)不为空,
`子对象id`int(11)不为空,
主键(`id`)
)引擎=InnoDB默认字符集=utf8mb4行\格式=动态;
然后下面的查询将返回给定子对象的父对象(
params[:child\u objects]

ParentObject.join(:child\u objects)。其中(child\u objects:{id:child\u object\u ids})
但是,如果您希望一个子项只属于一个父项,则不需要定义一个
has\u many
关系和连接表

class ParentObject
ParentObject.joins(:child_objects).where(child_objects: { id: child_objects} )