Я пытаюсь построить модель продуктов, которая имеет много компонентов.Некоторые компоненты являются необязательными и зависят от выбора, который делает пользователь, чтобы включить их или нет.У меня есть две модели, одна - конфигурация, а другая - элементы (этой конфигурации).
Вначале я привожу все элементы массива, а затем создаю другой массив из тех, которые будут показаны по умолчанию.,Но когда я пишу следующий код, он выдает ошибку, несмотря на то, что оба объекта являются массивами хэшей.
Поэтому я привожу свой первый массив всех элементов:
irb(main):252:0* @all = Configuration.find(1).elements
=> [#<Element id: 1, name: "elem1", quantity: 1, position: 1, subposition: nil, created_at: nil, updated_at: nil, configuration_id: 1>, #<Element id: 2, name: "elem2", quantity: 2, position: 2, subposition: 1, created_at: nil, updated_at: nil, configuration_id: 1>, #<Element id: 3, name: "elem3", quantity: 3, position: 2, subposition: 2, created_at: nil, updated_at: nil, configuration_id: 1>, #<Element id: 4, name: "elem4", quantity: 4, position: 3, subposition: nil, created_at: nil, updated_at: nil, configuration_id: 1>]
Затем я фильтруютолько те, которые имеют субпозицию nil или 1
irb(main):253:0> @default = @all.where(:subposition=>nil).concat(@all.where(:subposition=>1))
=> [#<Element id: 1, name: "elem1", quantity: 1, position: 1, subposition: nil, created_at: nil, updated_at: nil, configuration_id: 1>, #<Element id: 4, name: "elem4", quantity: 4, position: 3, subposition: nil, created_at: nil, updated_at: nil, configuration_id: 1>, #<Element id: 2, name: "elem2", quantity: 2, position: 2, subposition: 1, created_at: nil, updated_at: nil, configuration_id: 1>]
Пока все хорошо, как вы можете видеть, Elem3 не показывается в @default, поскольку не соответствует требованиям.
Проблема возникает, когда я пытаюсь поиграть с массивами, поскольку мне нужно выполнить определенные операции.
irb(main):257:0> @all.where(:position =>1)
=> [#<Element id: 1, name: "elem1", quantity: 1, position: 1, subposition: nil, created_at: nil, updated_at: nil, configuration_id: 1>]
Но та же операция в @default завершится неудачей,
irb(main):258:0> @default.where(:position =>1)
NoMethodError: undefined method `where' for #<Array:0x2641660>
Теперь,они оба массива хэшей и выглядят одинаково, почему один и тот же метод не работает во втором случае?
Большое спасибо за вашу помощь!