1

次のように作成されたオブジェクトのインスタンスがあります。

Example.create(:attrib0 => {
  :attrib1 => value,
  :attrib2 => [
    {:attrib3 => value},
    {:attrib4 => value}
    ]
})

どうすればアクセスできます:attrib4か?

4

3 に答える 3

2

モデルで使用する必要がserializeあります。そうすれば、ハッシュを正しく返すことができます。

class SomeModel < ActiveRecord::Base
  serialize :attrib0
end

次に、以下はハッシュを返す必要があります

hash  = @model.attrib0
# => {:attrib1 => value, :attrib2 => [{:attrib3 => value}, {:attrib4 => value}]

# now to access attrib4 you need to get the attrib2 array,
# then grab attrib4 by its index:
hash[:attrib2][1]
# => {:attrib4 => value}

# or to get the value:
hash[:attrib2][1][:attrib4]
# => value

ただし、上記は非常に複雑で醜いものになる可能性があるため、代わりにこれらの属性用に別のモデルを作成することをお勧めしました。

于 2013-04-21T12:21:08.690 に答える
0

Ruby の手法のみを使用:

h = {:attrib0 => {
  :attrib1 => :value1,
  :attrib2 => [
    {:attrib3 => :value2},
    {:attrib4 => :value3}
    ]
}}

p h[:attrib0][:attrib2].last[:attrib4] #=> :value3
于 2013-04-21T12:44:26.853 に答える