自从为我的目的选择最好的结构以来,我没有走得更远。我有:
class Image < ActiveRecord::Base
attr_accessible :date, :description, :name, :image, :tag_ids
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
mount_uploader :image, ImageUploader
end
然后:
class Tag < ActiveRecord::Base
attr_accessible :name
has_many :taggings, :dependent => :destroy
has_many :images, :through => :taggings
end
和:
class Tagging < ActiveRecord::Base
belongs_to :image
belongs_to :tag
attr_accessible :image_id, :tag_id
end
我现在有三个主要类别,所有图像都属于“太阳系”、“银河系”或“宇宙”。假设我有一张土星的图像,所以我将其标记为“土星”和“太阳系”。土星卫星的图像将进一步标记为“月亮”。仙女座星系的图像将被标记为“宇宙”和“星系”。
如果我想显示所有图像,例如带有 url 的太阳系图像:www.website.com/solarsystem
应该有到例如木星或土星的链接。如果我单击土星,则 url 应为:www.website.com/solarsystem/saturn ...它会显示所有带有“土星”标签的图像。
在这种情况下,作为链接的类别结构(也将显示)应为:
主页 > 太阳系 > 土星
所有类别都是可点击的,并引导您进入该类别的图像。使用 Image、Tag 和 Tagging 模型,我发现很难实现所有这些。例如,在 /image/show.html 中,我无法显示类别结构的正确链接,因为它们取决于图像的标签。例如,我需要说如果 tag.name = 'Saturn' 那么第一个链接应该是“太阳系”。如果 tag.name = 'Galaxy',则第一个链接应为“Universe”。但是对于许多标签和组合,它会变得相当混乱。正确的网址(www.website.com/solarsystem/saturn)对我来说也不容易实现。
有没有一个好的解决方案,也许有另一个模型结构,也许有一个自己的模型来处理所有标签,比如“土星”或“木星”?