我试图用以下约束来建模图像模型和页面模型之间的关系:
1 -一个页面最多可以有一个图像(0图像也可以)
2 -一个图像可以出现在多个页面。
,所以关系可以推测如下:
class Image < ActiveRecord :: Base
has_many :pages, :through :imageables
end
class Page < ActiveRecord :: Base
has_one :image, :through :imageables
end
class Imageable < ActiveRecord :: Base
belongs_to :image
belongs_to :page
end
通常这种关联要么同时存在于带有has_many:through的Image类和Page类,要么同时存在于带有has_one:through的Page类在这种情况下,有可能混合使用has_one:through和has_many:through吗?ActiveRecord没有提到这个特殊情况
p。S:我选择使用连接模型的方式,因为我有其他模型,可以有相同的图像,以及不同的约束(has_many而不是has_one)
谢谢你的帮助!
上面的代码不起作用…我找到了一个中间的解决方案来实现我需要的模式。
最终代码如下:
class Image < ActiveRecord :: Base
has_many :pages, :through :imageables
end
class Page < ActiveRecord :: Base
has_many :image, :through :imageables
accepts_nested_attributes :images, allow_destroy => true
end
class Imageable < ActiveRecord :: Base
belongs_to :image
belongs_to :page
validates_uniqueness_of :page_id
end
当我使用rails_admin来编辑我的模型时,当涉及到添加新图像和Imageable验证时,我得到了正好的东西,确保编辑器不会混淆规范…
作为一个解决方案有点奇怪,但相信我,它很适合我正在开发的应用程序的上下文…
我把它贴出来,如果有人有类似的问题。