Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails activerecord-如何继承所有子关联?_Ruby On Rails_Ruby_Inheritance_Activerecord_Associations - Fatal编程技术网

Ruby on rails Rails activerecord-如何继承所有子关联?

Ruby on rails Rails activerecord-如何继承所有子关联?,ruby-on-rails,ruby,inheritance,activerecord,associations,Ruby On Rails,Ruby,Inheritance,Activerecord,Associations,因此,在我的应用程序中,我有人和服装的模型。在我的《人物秀控制器》中,我得到如下列表: @people = Person.where("description LIKE ?", "%#{params[:description]}%") <% @people.each do |person| %> <p> Name: <%= person.name %> </p> <% @outfits = person.outfits %>

因此,在我的应用程序中,我有人和服装的模型。在我的《人物秀控制器》中,我得到如下列表:

@people = Person.where("description LIKE ?", "%#{params[:description]}%")
<% @people.each do |person| %>
  <p> Name: <%= person.name %> </p>
  <% @outfits = person.outfits %>
  <% @outfits.each do |outfit|
    <p> Name: <%= outfit.name %> </p>
    <p> Description: <%= outfit.description %> </p>
  <% end %>
<% end %> 
@people = Person.where("description LIKE ?", "%#{params[:description]}%").limit(20)
在我看来,我展示了每个人的服装如下:

@people = Person.where("description LIKE ?", "%#{params[:description]}%")
<% @people.each do |person| %>
  <p> Name: <%= person.name %> </p>
  <% @outfits = person.outfits %>
  <% @outfits.each do |outfit|
    <p> Name: <%= outfit.name %> </p>
    <p> Description: <%= outfit.description %> </p>
  <% end %>
<% end %> 
@people = Person.where("description LIKE ?", "%#{params[:description]}%").limit(20)

姓名:


您应该设置如下限制:

@people = Person.where("description LIKE ?", "%#{params[:description]}%")
<% @people.each do |person| %>
  <p> Name: <%= person.name %> </p>
  <% @outfits = person.outfits %>
  <% @outfits.each do |outfit|
    <p> Name: <%= outfit.name %> </p>
    <p> Description: <%= outfit.description %> </p>
  <% end %>
<% end %> 
@people = Person.where("description LIKE ?", "%#{params[:description]}%").limit(20)

根据您的喜好更改号码。

您应该设置如下限制:

@people = Person.where("description LIKE ?", "%#{params[:description]}%")
<% @people.each do |person| %>
  <p> Name: <%= person.name %> </p>
  <% @outfits = person.outfits %>
  <% @outfits.each do |outfit|
    <p> Name: <%= outfit.name %> </p>
    <p> Description: <%= outfit.description %> </p>
  <% end %>
<% end %> 
@people = Person.where("description LIKE ?", "%#{params[:description]}%").limit(20)

根据您的偏好更改号码。

使用连接加载相关记录:

@people = Person.eager_load(:outfits)
                .where("description LIKE ?", "%#{params[:description]}%")
                .limit(20) # optional
否则,就会出现所谓的N+1查询问题,通过
@people
的每次迭代都会导致单独的数据库查询获取装备

是的,
oughts.person\u id
或创建关联的任何列都应该有外键索引。默认情况下,在迁移过程中使用
属于
引用
宏将执行此操作:

create_table :outfits do |t|
  t.belongs_to :person, foreign_key: true
end

使用连接加载相关记录:

@people = Person.eager_load(:outfits)
                .where("description LIKE ?", "%#{params[:description]}%")
                .limit(20) # optional
否则,就会出现所谓的N+1查询问题,通过
@people
的每次迭代都会导致单独的数据库查询获取装备

是的,
oughts.person\u id
或创建关联的任何列都应该有外键索引。默认情况下,在迁移过程中使用
属于
引用
宏将执行此操作:

create_table :outfits do |t|
  t.belongs_to :person, foreign_key: true
end

您可以使用
.joins
includes

如果您有一张满是人的表格,并且您使用a:joins=>oughts拉入所有装备信息以进行排序,等等,那么它将很好地工作,所需时间将少于:include,但表示您希望显示该人以及装备名称、描述等。使用:joins获取信息,它必须为它获取的每个用户进行单独的SQL查询,而如果您使用了:include,则可以使用此信息

解决方案

Person.includes(:outfits).where("description LIKE ?", "%#{params[:description]}%")

您可以使用
.joins
.includes

如果您有一张满是人的表格,并且您使用a:joins=>oughts拉入所有装备信息以进行排序,等等,那么它将很好地工作,所需时间将少于:include,但表示您希望显示该人以及装备名称、描述等。使用:joins获取信息,它必须为它获取的每个用户进行单独的SQL查询,而如果您使用了:include,则可以使用此信息

解决方案

Person.includes(:outfits).where("description LIKE ?", "%#{params[:description]}%")

如果您知道您正在使用联接表中的数据,则最好使用
。包括在内的eager\u load
将使用两个单独的查询。如果您知道您正在使用联接表中的数据,则最好使用
。包括在内的eager\u load
将使用两个单独的查询。下面的答案将帮助您优化查询呼叫的性能,但您还必须通过添加某种分页或逐步显示更多内容来限制显示内容。下面的答案将帮助您优化呼叫的性能,但您还必须通过添加某种分页或逐步显示更多内容来限制显示内容。加上偏移量可帮助分页。加上偏移量可帮助分页。