Ruby on rails Rails与外键的关联

Ruby on rails Rails与外键的关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我对这些问题有点困惑 这是项目模型 class Item < ActiveRecord::Base has_many :true_items, :foreign_key => "parent_id", dependent: :destroy end 这里的问题是,当我在循环中使用item.name(如“#{true_item.item.name}”)时,会发生重复查询,这意味着再次调用该项以获取名称。该关联是否存在任何问题?之所以出现这种情况,是因为您有两个关联,即到父项的关联

我对这些问题有点困惑

这是项目模型

class Item < ActiveRecord::Base
  has_many :true_items, :foreign_key => "parent_id", dependent: :destroy
end

这里的问题是,当我在循环中使用item.name(如“#{true_item.item.name}”)时,会发生重复查询,这意味着再次调用该项以获取名称。该关联是否存在任何问题?

之所以出现这种情况,是因为您有两个关联,即到
父项的关联和到
项的关联

您可以在循环中调用正确的关联:

Item.includes(:true_items).each do |item|
   item.true_items.each do |true_item|
      true_items = "#{true_item.parent.name}"
   end
end
或者您实际上可以向关联中添加别名(因为
父项
实际上是相同的关联):

class-TrueItem“项”
别名\属性:项,:父项
结束
#app/models/item.rb
类项

这将允许您调用以下命令:

<% @items = Item.all %>
<% @items.each do |item| %> 
   <% item.true_items.each do |true_item| %>
      <%= true_item.name %>
   <% end %>
<% end %>


您甚至可以保留您的
true\u项目
表格(您可能必须删除
id
处创建的字段和
处更新的字段。

谢谢,但这并不是为了避免重复,因此我不能使用parent.item,因为项和父项不同,这里我使用的是TrueItem名称,但是当我们使用父项时,它是从表(item.name)中给出的
Item.includes(:true_items).each do |item|
   item.true_items.each do |true_item|
      true_items = "#{true_item.parent.name}"
   end
end
class TrueItem < ActiveRecord::Base
  attr_accessible :item_id, :parent_id

  belongs_to :parent, :class_name => "Item"
  alias_attribute :item, :parent
end
#app/models/item.rb
class Item < ActiveRecord::Base
   has_and_belongs_to_many :true_items,
        class_name: "Item", 
        join_table: :true_items, 
        foreign_key: :item_id, 
        association_foreign_key: :true_item_id
end
<% @items = Item.all %>
<% @items.each do |item| %> 
   <% item.true_items.each do |true_item| %>
      <%= true_item.name %>
   <% end %>
<% end %>