Ruby on rails 如何为has\u many关系编写Rails查找器查询?
我使用的是Rails 5。我有以下课程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 您可以通过下
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} )