为对象分配多个别名/昵称

时间:2016-06-13 16:15:53

标签: ruby-on-rails activerecord

我正在制作与音乐相关的应用,其中艺术家有多个别名昵称。例如,在一张专辑中,艺术家 Snoop Dogg 可以在另一张专辑中被视为 Snoop Lion 。我想知道什么是最好的方法,Active Model明智地创建一个模型有一个或多个别名的设置?想到的第一个想法就是建立一对多的关系:

class Artist < ActiveRecord::Base
  has_many :aliases
end

class Alias < ActiveRecord::Base
  belongs_to :artist
end

有了这个说法,我对这个设置的错误完全没问题。只是不确定为此创建一个单独的表是最有利的。除此之外,我仍然需要别名与艺术家同义,而别名正是它的一个Alias对象。关于完成这个的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为别名表可能是您遇到的最佳方法,除非您想序列化数据库中的别名列。 但是,使用序列化方法会使得索引/搜索数据库中的别名变得有点困难,或者效率很低。 无论如何使用别名表方法,您都可以轻松完成

Artist.first.aliases

或搜索具有特定别名的艺术家时,您可以执行以下操作:

Alias.where(name: "Snoop Lion").artist

另外,我可以想象你的歌曲模型是:

class Song < AR::Base
  belongs_to :alias
  delegate :artist, to: :alias

end

我不知道你的实施方法,但我认为这可能是一个很好的方法。