Неопределенный метод `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)
Другие вопросы по тегам