Неопределенный метод `child_ids'для nil:NilClass,Rails
Я пытаюсь получить корневую категорию - подкатегории, используя драгоценный камень Ancestry. Я попробовал это в консоли рельсов, это работало. Он без проблем извлекает sub id, но когда я использую его в контроллере (фактическое приложение), он показывает такую ошибку:
Mysql2::Error: Operand should contain 1 column(s): SELECT COUNT(*) FROM `categories` WHERE (id = 2,7,15,16)
Код в контроллере:
@category = Category.find_by_name(params[:category])
@sub_ids = @category.child_ids
@subcat = Category.where("id = ?", @sub_ids)
Спасибо (((((:
2 ответа
Совершенно ясно, что категория с указанным именем не существует (поэтому Category.find_by_name
метод возвращает nil
). Вы, вероятно, не установлены @params
переменная экземпляра правильно.
Что касается вашей второй ошибки, последняя строка в вашем коде должна быть:
@subcat = Category.where(id: @sub_ids)
Или, чтобы сделать это проще, вы можете использовать существующую библиотеку для обработки такого рода логики, например actions_as_tree.
По-видимому Category.find_by_name(@params)
возвращается nil
поэтому на первой строке вы назначаете nil
в @category
,
@category = Category.find_by_name(@params) # => nil
Затем на следующей строке вы звоните #child_ids
метод на nil
(То есть. nil.child_ids
) что конечно не определено.
Кроме того, если @sub_ids
это массив идентификаторов, в вашей последней строке вы должны сделать:
@subcat = Category.where(id: @sub_ids)