Проблема заключается в том, что вы используете has_many, которые всегда будет возвращать массив. Вы делаете несколько вещей неправильно.
Не делайте product.color_ids.nil?
, потому что он никогда не будет нулем, вы хотите product.colors.empty?
, потому что пустой массив не равен нулю, он пуст.
Эта строка current_user.find_by_color_id(product.color_ids.nil? ? nil : product.color_ids.color.id)
никогда не будет работать. current_user
- это метод Devise для получения объекта current_user, поэтому добавление find к нему приведет к ошибке.
Также product.color_ids.color.id
также не будет работать. Я не уверен, что вы здесь делаете, но product.colors
и product.color_ids
оба возвращают массив. Если вы хотите первый идентификатор, вы можете сделать product.colors.first.id
или product.color_ids.first
.
Похоже, вы далеко от дома, извините. Я рад помочь больше, но мне нужна дополнительная информация, мне нужна модель пользователя и понимание того, что вы пытались сделать с помощью current_user.find_by_color_id(product.color_ids.nil? ? nil : product.color_ids.color.id)
.
Что вы думаете? –
@EliSadoff выберите идентификатор на массиве – jjplack
Если по «id на массив» вы имеете в виду индекс элемента в массиве, который вы хотите использовать «each_with_index». Если вы хотите найти идентификатор записи, возвращаемой Active Record, вы можете вызвать метод «id» для возвращаемого объекта (записи). – bkunzi01