В MySQLWorkbench вместо File> Run SQL Script вы можете попробовать использовать File> Open SQL Script, а затем Query> Execute (All или Selection)? Таким образом, вы должны увидеть результат каждого запроса скрипта schema.sql.
Вы также можете попробовать использовать команду mysql (из командной строки). Или разделив schema.sql на более мелкие куски, чтобы изолировать проблему.
Если ничего не работает, я предлагаю вам проверить установку MySQL Workbench.
Как насчет того, чтобы Child
определял <=>
как основанный на category.position
if category
] существует, и сортировка элементов без категории
всегда выше, чем с категорией
?
class Child
# Not strictly necessary, but will define other comparisons based on <=>
include Comparable
def <=> other
return 0 if !category && !other.category
return 1 if !category
return -1 if !other.category
category.position <=> other.category.position
end
end
Тогда в Parent
вы можете просто вызвать children .sort
.
Я занимаюсь такими вещами, как это:
children.sort_by {|child| [child.position ? 0 : 1,child.position || 0]}
Я бы просто настроил ваш тип так, чтобы последние ноль
пунктов были последними. Попробуйте что-то вроде этого.
foo = [nil, -3, 100, 4, 6, nil, 4, nil, 23]
foo.sort { |a,b| a && b ? a <=> b : a ? -1 : 1 }
=> [-3, 4, 4, 6, 23, 100, nil, nil, nil]
Это говорит: если a и b оба не равны нулю, сортируйте их нормально, но если один из них равен nil, возвращайте статус, который сортирует этот один больше.
Честно говоря, я не очень знаком с Ruby, поэтому воспринимайте это как идею алгоритма, а не как код ... и перепишите оператор?: Как и все, что есть в Ruby. это чище.
Разве вы не можете просто проверить nil в сравнении:
class Parent
def sorted_children
children.sort{|a,b|( a and b ) ? a <=> b : ( a ? -1 : 1 ) }
end
end
Отредактировано для использования кода Glenra, который реализует то же самое, что и мой, но в меньшем (и, вероятно, легче читаемом) объеме кода.
Я давно не делал Ruby, но вы могли бы отделить проверку нуля от сортировки (и просто разрешить позиции Child # возвращать ноль):
def sorted_children
children.reject{|c| c.position.nil?}.sort_by(&:position) +
children.select{|c| c.position.nil?}
end
Правда, это не самое эффективное решение, но у него нет магических чисел.