Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何组织此表,以便根据访问它的对象的类型对其进行访问_Ruby On Rails_Database Design - Fatal编程技术网

Ruby on rails 如何组织此表,以便根据访问它的对象的类型对其进行访问

Ruby on rails 如何组织此表,以便根据访问它的对象的类型对其进行访问,ruby-on-rails,database-design,Ruby On Rails,Database Design,我有一个表,其中包含一个名为“icon_for”的字段,我一直在使用该字段检查图标是否可用于“用户”或“问候语” 这显然不是最好的方法,好像我想用一个图标来表示“问候语”和“用户”,甚至是其他我会卡住的对象 我是否需要创建另一个名为icons\u object的表,然后列出icon\u id和object\u name? 如果一个图标用于多个对象,我可能需要重复很多图标的id,但这是正确的方法吗 还有Rails中的表关联是什么。假设该表称为图标\对象。 那么在Rails中呢 Icon.rb 图标

我有一个表,其中包含一个名为“icon_for”的字段,我一直在使用该字段检查图标是否可用于“用户”或“问候语”

这显然不是最好的方法,好像我想用一个图标来表示“问候语”和“用户”,甚至是其他我会卡住的对象

我是否需要创建另一个名为icons\u object的表,然后列出icon\u id和object\u name? 如果一个图标用于多个对象,我可能需要重复很多图标的id,但这是正确的方法吗

还有Rails中的表关联是什么。假设该表称为图标\对象。 那么在Rails中呢

Icon.rb

图标有很多:图标对象

这里完全混乱,所以任何对NOOB的帮助都将不胜感激


有办法做到这一点吗?

听起来你在谈论一种多对多的关系。在中,图标可以属于多个对象,并且一个对象可以有多个图标。你需要一个匹配的表来建立这种关系。。。比如你提到的图标_对象。然后,您的模型将使用
has\u many:through
关系或
has\u和\u pensible\u to \u many
。如果存在图标对象只是为了将对象映射到图标,那么您可能希望使用
has\u和\u besides\u to \u many
。如果您认为需要存储有关特定图标与特定对象关系的附加信息,则可能需要实际的
IconObject
模型,并应使用
has\u many:through
将图标映射到对象


如果一个对象只能有一个图标,则将外键放入每个对象表中(因此
用户
有一个
图标id
字段,
问候语
表也是如此)。然后,用户和问候语将与图标有
归属关系,图标将与用户和问候语有
多个关系。

您想使用多态关联。例如:

class Icon < ActiveRecord::Base
  belongs_to :iconable, :polymorphic => true
end    

class Greeting < ActiveRecord::Base
  has_many :icons, :as => :iconable
end

class User < ActiveRecord::Base
  has_many :icons, :as => :iconable
end
或者,如果要查询特定类型的图标:

Icon.where(:iconable_type => "greeting")
这种方法与您已经采取的方法没有什么不同。使用这种方法的好处是,您可以获得父对象,而不必担心它是什么类型,就像您尝试在这个线程中实现另一个答案一样

您只需要运行一些迁移就可以让一切正常工作。您可以在上查看更多信息

按评论编辑:

严格地说,你是对的。不能有指向用户和问候语的多态记录。但是,您可以进行一个小的更改并创建另一个模型,它的行为类似于联接表

class IconConnection < ActiveRecord::Base
  belongs_to :inconable, :polymorphic => true
  belongs_to :icon
end

class Icon < ActiveRecord::Base
  has_many :icon_connections
end

class Greeting < ActiveRecord::Base
  has_many :icon_connections, :as => :iconable
  has_many :icons, :through => :icon_connections
end

class User < ActiveRecord::Base
  has_many :icon_connections, :as => :iconable
  has_many :icons, :through => :icon_connections
end
class IconConnectiontrue
属于:图标
结束
类图标:iconable
有多个:图标,:至=>:图标\u连接
结束
类用户:iconable
有多个:图标,:至=>:图标\u连接
结束
每个IconConnection将指向问候语或用户,并且每个IconConnection将指向同一个图标


此设置假定您可以为每个用户和问候语设置多个图标,但如果没有,您可以将
has\u many
替换为
has\u one

Hi Sean,谢谢您提供的信息。我在想这件事时有些困难。如果我希望问候语和用户可以访问相同的图标,该怎么办。它在指南上的外观是一个图标对应一个对象。不过我可能误解了。我希望相同的图标可用于问候语和用户。我不确定我能用多态性来做这件事。我错了吗?哇,太棒了。非常感谢您的澄清和所有细节。我会试试看。你好,Cark,谢谢你提供的信息。我想我必须走这条路,因为图标可以同时属于问候语和用户。我不需要存储任何附加信息。这些对象只能有一个图标,所以我已经有了这些外键,正如您所说的,这些外键和关联有很多并且属于它们。但是,我对联接表感到困惑。我是否制作了一个icon_objects表?如果是,如何将其连接在一起,以便我可以访问@user.icons中的用户图标?
class IconConnection < ActiveRecord::Base
  belongs_to :inconable, :polymorphic => true
  belongs_to :icon
end

class Icon < ActiveRecord::Base
  has_many :icon_connections
end

class Greeting < ActiveRecord::Base
  has_many :icon_connections, :as => :iconable
  has_many :icons, :through => :icon_connections
end

class User < ActiveRecord::Base
  has_many :icon_connections, :as => :iconable
  has_many :icons, :through => :icon_connections
end