Использование act_as_list для нескольких столбцов - PullRequest
6 голосов
/ 22 октября 2011

У меня есть, возможно, уникальный случай, когда мне нужна модель, имеющая два разных порядка в зависимости от модели, к которой она присоединена. Пример следующим образом:

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 не поддерживает использование двухпозиционных столбцов, поскольку такие методы, как move_to_top, не позволяют указать, какой список следует переместить в начало.

Кто-нибудь получил какие-либо предложения о том, как мне этого добиться? Сейчас я думаю, что мне нужно будет создать таблицу соединений, такую ​​как books_genres, в которой есть столбец position, но я действительно не слишком заинтересован в этом, так как это требует целой загрузки дополнительных таблиц.

Ответы [ 3 ]

2 голосов
/ 30 июля 2016

Старый пост, но я надеюсь, что это поможет.Это работает с act_as_list 0.7.6 как минимум ...

Добавьте вашу область в массив и используйте идентификаторы в качестве параметров ...

belongs_to :website
belongs_to :page    
acts_as_list scope: [:website_id, :page_id]
1 голос
/ 07 октября 2014

Попробуйте другой камень под названием ranked-model .Он поддерживает тот случай, который вы упомянули с помощью параметра define: 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
1 голос
/ 12 января 2012

Действует как список, не предназначенный для нескольких столбцов. Плагин будет практически переписан, если вы захотите использовать его таким образом. Но я думаю, что вы можете попытаться сделать это.

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

не уверен, что это работает. теоретически возможно.

...