繁体   English   中英

Rails多态协会的问题

[英]Issue with Rails Polymorphic Association

我正在尝试为用户创建一个应用,以创建他们拥有或希望购买的手表的列表。 我希望用户能够描述有关其手表的许多细节/属性。 我正在尝试创建父/子关联,但不使用STI,因为子模型具有不同的数据,并且我不希望表中出现一堆空值。

我有4张桌子:

  • 使用者
    • 一些用户属性
  • 手表
    • 用户身份
    • 所有手表,名称,品牌等共有的一堆属性。
    • content_id
    • 内容类型
  • 机械表
    • 某些仅适用于机械表的属性
  • 石英表
    • 一些仅适用于石英表的属性

楷模

class User < ApplicationRecord
 include Clearance::User

 has_many :watches
end

class Watch < ApplicationRecord
 belongs_to :user
 belongs_to :content, polymorphic: true
end

class MechanicalWatch < Watch
 has_one :watch, as: :content
end

class QuartzWatch < Watch
 has_one :watch, as: :content
end

我不确定是否已正确设置关联100%。 但是我遇到的问题是,当我在控制台中输入MechanicalWatch时,它仅返回Watch上的属性,而不返回Mechanical_watches表中的任何属性。 我已经尝试了所有我能想到的。 关于我在做什么错的任何想法。

我正在使用Rails 5,Ruby 2.3.1和Postgres作为数据库。

我认为您不希望在MechanicalWatchQuartzWatch上继承。 它们似乎是与Watch不同的表。 您显示的关系是MechanicalWatch “具有” Watch ,而不是MechanicalWatch “具有” Watch

你会改变

class MechanicalWatch < Watch

class MechanicalWatch

据我了解,您希望能够创建一个Mechanical_watch实例,但仍然能够在watch模型上设置字段。

即MechanicalWatch.new.field_on_watch = 4

如果正确,那么您可以看一下:

http://api.rubyonrails.org/classes/Module.html

您寻找的模式是委托。

不过,有一个重要问题要问:您打算以多态方式使用手表吗? 即可以在同一页面上显示所有类型的手表吗? 还是会分开显示不同的手表?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM