gpt4 book ai didi

ruby-on-rails - Rails 3 中的多态关联

转载 作者:行者123 更新时间:2023-12-04 06:19:13 24 4
gpt4 key购买 nike

我想我快疯了。

假设我有 3 个模型:地址、仓库、类别:

class Address < ActiveRecord::Base
belongs_to :category
belongs_to :addressable, :polymorphic => true

scope :billing_addresses , where(:categories => {:name => 'billing'}).joins(:category)
scope :shipping_addresses , where(:categories => {:name => 'shipping'}).joins(:category)

end


class Category < ActiveRecord::Base
has_many :addresses
has_many :subcategories, :class_name => "Category", :foreign_key => "category_id"
belongs_to :category, :class_name => "Category"
end


class Warehouse < ActiveRecord::Base
has_many :addresses, :as => :addressable
end

地址是多态的,因为最终我将使用它来存储客户、人员、员工等的地址。每个地址也可以是某种类型:账单、运输、工作、家庭等。

我正在尝试在页面上提取一些信息。
@some_warehouse = Warehouse.first

那么在我看来:
%b= @some_warehouse.name
%b= @some_warehouse.billing_address.address_line_1

等等。

我最终会查找每一行信息。

我试着做这样的事情
Warehouse.includes(:addresses).where(:name => "Ware1")
Warehouse.joins(:addresses).where(:name => "Ware1")

以及各种变化。
无论我做什么,我都无法让 rails 预加载所有表格。我究竟做错了什么?

最佳答案

以下是修改后的模型,它在 sql 中进行适当的连接并将查询数量从 16 减少到 8,每条信息一个,而不是也执行查找类别等的倍数:

class Address < ActiveRecord::Base
belongs_to :category
belongs_to :addressable, :polymorphic => true

scope :billing_addresses , where(:categories => {:name => 'billing'}).includes(:category)
scope :shipping_addresses , where(:categories => {:name => 'shipping'}).includes(:category)

end

class Warehouse < ActiveRecord::Base
has_many :addresses, :as => :addressable, :include => :category, :dependent => :destroy

def billing_address
self.addresses.billing_addresses.first
end
def shipping_address
self.addresses.shipping_addresses.first
end
end


class Category < ActiveRecord::Base
has_many :addresses
has_many :subcategories, :class_name => "Category", :foreign_key => "category_id"
belongs_to :category, :class_name => "Category"
end

sleep 有帮助。也不要忘记不时重新加载控制台:-)

关于ruby-on-rails - Rails 3 中的多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com