Ruby on rails 模型多态关系中的多个has_-one
我有一个这样的公司模型:Ruby on rails 模型多态关系中的多个has_-one,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我有一个这样的公司模型: class Company < ActiveRecord::Base has_one :visiting_address, -> { where "addressable_type = 'visiting_address'" }, as: :addressable, class_name: "Address", dependent: :destroy has_one :billing_address, -> { where "addressab
class Company < ActiveRecord::Base
has_one :visiting_address, -> { where "addressable_type = 'visiting_address'" }, as: :addressable, class_name: "Address", dependent: :destroy
has_one :billing_address, -> { where "addressable_type = 'billing_address'" }, as: :addressable, class_name: "Address", dependent: :destroy
has_one :delivery_address, -> { where "addressable_type = 'delivery_address'" }, as: :addressable, class_name: "Address", dependent: :destroy
def visiting_address=(address)
super
address.update_attribute(:addressable_type, "visiting_address")
end
def delivery_address=(address)
super
address.update_attribute(:addressable_type, "delivery_address")
end
def billing_address=(address)
super
address.update_attribute(:addressable_type, "billing_address")
end
end
为什么要做这个查询,但在我调用c.U地址保存并退出之前,我得到了正确的地址,现在是零。
有人能帮我吗?这在console中确实有效吗?我不认为
super
能做你认为它能做的事。你有能力改变结构吗?因为单表继承对我来说比多态关联更有意义。但我使用了多态性,因为我有更多的模型将地址作为属性。就super而言,如果我没有重写它,它不只是调用它通常会调用的方法吗?super
调用父对象中具有相同名称的方法,传递所有参数。这里的父对象是ActiveRecord::Base
。老实说,我会改用STI。因此,您有一个地址
类,并从该账单地址
,送货地址
类e.t.c继承。
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
end
SELECT "addresses".* FROM "addresses" WHERE "addresses"."addressable_id" = ? AND "addresses"."addressable_type" = ? AND (addressable_type = 'billing_address') LIMIT 1 [["addressable_id", 1], ["addressable_type", "Company"]]