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
将使用两个单独的查询。下面的答案将帮助您优化查询呼叫的性能,但您还必须通过添加某种分页或逐步显示更多内容来限制显示内容。下面的答案将帮助您优化呼叫的性能,但您还必须通过添加某种分页或逐步显示更多内容来限制显示内容。加上偏移量可帮助分页。加上偏移量可帮助分页。