我正在尝试构建包含许多组件的产品模型。有些组件是可选的,取决于用户是否选择启用它们。 我有两个模型,一个是配置,另一个是元素(该配置)。查找哈希数组中的元素
开始的时候我带了数组的所有元素,然后创建另一个默认显示的数组。 但是当我写下面的代码时,尽管两个对象都是散列数组,但它给了我一个错误。
所以我把我的所有元素的第一阵列:
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>]
然后我过滤是只有那些有subposition零或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>
现在,他们是哈希数组或看起来是一样的,为什么同样的方法在第二种情况下失败?
非常感谢您的帮助!