我有一个可能独特的情况,我需要一个模型,根据它所连接的模型,有两个不同的顺序。示例如下:
class Book
acts_as_list :column => :genre, :scope => :genre
acts_as_list :column => :author, :scope => :author
belongs_to :genre
belongs_to :author
end
所以基本上我要做的是有一个Book模型,它是两个列表的一部分,一个用于它出现的类型页面,另一个用于它出现的作者页面。
acts_as_list
似乎不支持使用2个位置列,因为move_to_top
等方法不允许您指定要移到顶部的列表。
有没有人对如何实现这一点有任何建议?现在我想我必须创建一个连接表,例如books_genres
,其中有position
列,但我真的不太热衷于此,因为这需要一大堆额外的表。< / p>
答案 0 :(得分:2)
旧帖但我希望这会有所帮助。这适用于act_as_list 0.7.6至少......
在数组中添加范围并使用id作为参数...
belongs_to :website
belongs_to :page
acts_as_list scope: [:website_id, :page_id]
答案 1 :(得分:1)
作为列表不是为多列设计的。如果你想以这种方式使用它,几乎会重写.plugin。但我认为你可以试试这个。
class Book
belongs_to :genre
belongs_to :author
end
class GenreBook < Book
acts_as_list :column => :genre, :scope => :genre
end
class AuthorBook < Book
acts_as_list :column => :author, :scope => :author
end
不确定它是否有效。理论上可行。
答案 2 :(得分:1)
尝试另一个名为ranked-model的宝石。它支持您通过指定:with_same选项提到的情况。我自己试过了。
对于您的示例,您可以执行以下操作:
class Book
belongs_to :genre
belongs_to :author
ranks :within_genre,
:with_same => :genre_id,
:column => :genre
ranks :within_author,
:with_same => :author_id,
:column => :author
end