在rails中是否可以组合2个has_many关系,因此我可以按位置排序关联。
我已经尝试过这个:
has_many :paragraphs
has_many :images
def items
(self.paragraphs + self.images)
end
但是,按位置订购物品是不可能的。 有没有一种方法,我可以使用,所以它会是: has_many:items,(这里结合了2个has_many关系).order(:position)
三江源!
更新
这是我的完整设置:
class Page < ActiveRecord::Base
has_many :containers
end
class Container < ActiveRecord::Base
has_many :paragraphs, -> { order(:position) }, class_name: 'Content::Paragraph'
has_many :images, -> { order(:position) }, class_name: 'Content::Image'
accepts_nested_attributes_for :paragraphs
accepts_nested_attributes_for :images
def items
items = self.paragraphs + self.images
end
end
class Content::Paragraph < ActiveRecord::Base
belongs_to :container, class_name: 'Container'
end
class Content::Image < ActiveRecord::Base
belongs_to :container, class_name: 'Container'
end
容器属于某个页面。
我想在页面上显示所有项目,所以段落+图像按位置排序。 此外,Acts_as_list -ish gems最多可用于单个模型,而不适用于多个模型(我的情况)。我想我需要一个父模型(反向多态关联?),以便以正确的顺序轻松获取所有所有物品。
实施例
Container:
- Alinea (position 1)
- Image (position 2)
- Alinea (position 3)