Итак, у меня есть куча пользователей, у которых есть атрибуты user.dj_name. Это обоснованная необходимость в модели, но я все еще осторожна здесь, потому что у меня проблемы.NoMethodError для объекта nil на sort_by, и все объекты существуют
Я хочу получить кучу пользователей, а затем заказать их по их dj_name. Что-то вроде этого:
@djs = Event.all.map { |e| e.program.user }.sort_by {|x,y| x.dj_name <=> y.dj_name }
где он тянет всех ди-джеев, у которых есть события (шоу). Она терпит неудачу с "NoMethodError: неопределенный метод` dj_name»для ноль: NilClass"
Так что я попытался:
@djs = Event.all.map { |e| e.program.user }
@djs.compact.sort_by! {|x,y| x.dj_name <=> y.dj_name rescue nil}
И это не сортирует. Без предложения «rescue nil» я получаю ту же ошибку.
И если я сделаю отказ! если объект равен нулю, я ничего не получаю.
> @djs.reject! {|d| d.nil? }
=> nil
Похоже, ни один из объектов в массиве равны нулю, механизм сортировки дает мне ошибки, и спасение это просто останавливает процесс сортировки и возвращает массив без изменений.
halp?
Вы не должны использовать строку 'rescue' и' compact' в любом случае удаляет нильские элементы. – squiguy
Ваша ошибка 'NoMethodError для nil object' сообщает вам, что объект, который вы пытаетесь отсортировать, пуст, поэтому, когда это выполняется, эта ошибка возникает. – David
Это сошло с ума. Я не прокрутил вниз, чтобы увидеть последний ответ, который был правильным, и это то, что я делал. Я думаю, вы должны принять это вместо этого, поскольку он фактически решает вопрос. – you786