2011-10-22 18 views
6

我有一個可能獨特的情況,我需要一個模型根據它加入的模型有兩個不同的順序。舉例如下:在多列上使用acts_as_list

class Book 
    acts_as_list :column => :genre, :scope => :genre 
    acts_as_list :column => :author, :scope => :author 
    belongs_to :genre 
    belongs_to :author 
end 

所以基本上我試圖做的是有一本書模型,它是兩個列表,一個是它出現在風格頁,一個是它出現在作者頁面的一部分。

acts_as_list似乎並不支持使用2條位置的列的方法,如move_to_top不允許你指定移動到頂部哪個列表。

有沒有人對我如何實現這一目標有任何建議?現在我想我將不得不創建一個連接表,如books_genres其中有一個position列,但我真的不那麼熱衷於此,因爲這需要一整套額外的表。

+0

你有沒有得到這個排序?我開始了一個賞金,因爲我需要相同的解決方案 – jamesc

+0

不幸的是,沒有找到解決方案,雖然不介意賞金! –

+1

我正在尋找完全相同的功能... – MonsieurNinja

回答

1

如果您想以這種方式使用它,那麼將行爲列爲不適用於多個columns.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 

不確定它是否工作。理論上可行。

+0

如果你每次加載書籍只需要一種訂單, – suweller

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 
2

老的文章,但我希望這有助於。這適用於act_as_list 0.7.6至少...

添加您的範圍,數組,並使用ID作爲參數...

belongs_to :website 
belongs_to :page  
acts_as_list scope: [:website_id, :page_id]