Rails 5、疑虑——他们能引用数据库吗table?
Rails 5, Concerns - can they reference a database table?
我正在尝试了解问题。
我能找到的大多数博客文章和示例都是在将模型中定义的 class 方法移动到公共存储库的上下文中讨论的。我明白那部分。
我不明白是否可以使用关注点来减少关联模型的设置。例如,我有一个用户模型和一个组织模型。每个用户和组织都会有一个地址。
address如果是模型,就是多态的,属于可寻址的。然后用户和组织将各有一个地址。
我正在尝试了解是否可以解决问题,然后将其包含在我的用户和组织模型中。如果是这样,我还能在数据库中有一个名为 address 的 table 吗?我不清楚如果我没有名为 address 的模型是否可以拥有 db table(如果我使用 models 文件夹中的 concerns 子文件夹来定义地址,我就不需要它)。
是的,你当然可以这样做,而且这很常见。您仍然需要数据库中的 Address
模型和 addresses
table。
看起来像这样:
# your user model (backed by users table)
class User < ApplicationRecord
include Addressable
end
# your organisation model (backed by organisations table)
class Organisation < ApplicationRecord
include Addressable
end
# your address model (backed by addresses table)
class Address < ApplicationRecord
belongs_to :addressable, polymorphic: true, touch: true
end
# the concern to DRY up shared relation that both user adn organisation have
module Addressable
extend ActiveSupport::Concern
included do
has_one :address, as: :addressable, dependent: :destroy
end
end
我正在尝试了解问题。
我能找到的大多数博客文章和示例都是在将模型中定义的 class 方法移动到公共存储库的上下文中讨论的。我明白那部分。
我不明白是否可以使用关注点来减少关联模型的设置。例如,我有一个用户模型和一个组织模型。每个用户和组织都会有一个地址。
address如果是模型,就是多态的,属于可寻址的。然后用户和组织将各有一个地址。
我正在尝试了解是否可以解决问题,然后将其包含在我的用户和组织模型中。如果是这样,我还能在数据库中有一个名为 address 的 table 吗?我不清楚如果我没有名为 address 的模型是否可以拥有 db table(如果我使用 models 文件夹中的 concerns 子文件夹来定义地址,我就不需要它)。
是的,你当然可以这样做,而且这很常见。您仍然需要数据库中的 Address
模型和 addresses
table。
看起来像这样:
# your user model (backed by users table)
class User < ApplicationRecord
include Addressable
end
# your organisation model (backed by organisations table)
class Organisation < ApplicationRecord
include Addressable
end
# your address model (backed by addresses table)
class Address < ApplicationRecord
belongs_to :addressable, polymorphic: true, touch: true
end
# the concern to DRY up shared relation that both user adn organisation have
module Addressable
extend ActiveSupport::Concern
included do
has_one :address, as: :addressable, dependent: :destroy
end
end