6

我有一个可能独特的情况,我需要一个模型有两个不同的订单,具体取决于它加入的模型。示例如下:

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列,但我真的不太热衷于此,因为这需要大量额外的表。

4

3 回答 3

2

旧帖子,但我希望这会有所帮助。这至少适用于 act_as_list 0.7.6...

将您的范围添加到数组中并使用 id 作为参数...

belongs_to :website
belongs_to :page    
acts_as_list scope: [:website_id, :page_id]
于 2016-07-29T21:22:51.233 回答
1

尝试另一个名为rank-model 的gem 。它支持您通过指定 :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
于 2014-10-06T23:37:51.543 回答
1

充当不是为多列设计的列表。如果您想以这种方式使用它,插件几乎会重写。但我认为你可以尝试这样做。

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

不确定它是否有效。理论上可以。

于 2012-01-12T07:29:56.493 回答