我试图用以下约束建模Image模型和Page模型之间的关系:
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的两个类Image和具有has_many的两个类中:或者两者都具有has_one:through 在这种情况下,是否可以在has_one:through和has_many:之间进行混合? ActiveRecord没有提到这个特殊情况
P.S:我选择使用连接模型方式,因为我有其他模型可以拥有相同的图像以及不同的约束(has_many而不是has_one)
感谢您的帮助!
答案 0 :(得分:1)
上面的代码没有用......我找到了一个实现我需要的架构的中间解决方案。
最终代码如下:
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中的验证确保ditor不会乱用规范......
作为解决方案有点奇怪,但请相信我,它很适合我正在开发的应用程序的上下文......
如果有人有类似的担忧,我会张贴它。