2014-10-01 2 views
0

Итак, у меня есть простой список задач, в котором задачи действуют как список в области: tasklist. Теперь каждая задача может быть отмечена как заархивированная и выходит из списка.Rails act_as_list настраиваемая область

Мне нужна область действия act_as_list, чтобы включить условие WHERE archived = FALSE.

Я нашел это сообщение: http://macdiggs.com/2007/08/27/customizing-scope-in-acts_as_list/, но это с 2007 года и не работает для меня. Также я использую postgres, поэтому я не хочу hardcode archived = false, поскольку postgres обрабатывает логические значения по-разному от mysql (я думаю).

Я пробовал:

scope :not_archived, -> { where(archived: false) } 
scope :siblings, -> { where(tasklist_id: self.tasklist_id) } 
acts_as_list :scope => siblings.not_archived 

Но это не работает. Переменная self ссылается на класс, а не на экземпляр. Я немного потерян. Заранее спасибо

ответ

0

scope действует как метод класса, а self в нем будет ссылаться на класс. Internal Active Record преобразует область в метод класса. Вы можете передать tasklist_id в качестве опции

изменить область братьев и сестер

scope :siblings, ->(tasklist_id) { where(tasklist_id: tasklist_id) } 
+0

Привет спасибо за Ваш ответ. Теперь я получаю сообщение об ошибке «неправильное количество аргументов (0 для 1)». Я предполагаю, что последняя строка: siblings.not_archived ожидает аргумент для области siblings: например, например, братья и сестры (5). – MonsieurNinja

Смежные вопросы