0

ハッシュである非データベース モデルで仮想属性を使用できるようにしたいと考えています。このハッシュからアイテムを追加および削除するための構文が何であるかを理解できません。

私が定義した場合:

attr_accessor :foo, :bar

次に、モデルのメソッドで次を使用できます。

self.foo = "x"

しかし、私は言うことができません:

self.bar["item"] = "value"
4

4 に答える 4

2

試す

self.bar = Hash.new
self.bar["item"] = "value"
于 2012-09-27T20:03:43.037 に答える
1
class YourModel
  def bar
    @bar ||= Hash.new
  end

  def foo
    bar["item"] = "value"
  end
end

しかし、古典的なアプローチは次のようになります。

class YourModel
  def initialize
    @bar = Hash.new
  end

  def foo
    @bar["item"] = "value"
  end
end
于 2012-09-27T20:28:33.403 に答える
0

通話中:

attr_accessor :foo, :bar

あなたのクラスでは、Ruby はカーテンの後ろで次のようなことを行います:

def foo
  return @foo
end
def foo=(val)
  @foo = val
end

def bar
  return @bar
end
def bar=(val)
  @bar = val
end

メソッド #foo と #bar はインスタンス変数を返すだけで、 #foo= と #bar= はそれらを設定するだけです。したがって、それらのいずれかにハッシュを含める場合は、このハッシュをどこかに割り当てる必要があります。

私のお気に入りの解決策は次のとおりです。

class YourModel

  # generate the default accessor methods
  attr_accessor :foo, :bar

  # overwrite #bar so that it always returns a hash
  def bar
    @bar ||= {}
  end

end
于 2012-09-28T08:39:47.980 に答える
0

OpenStructHash with Indifferent AccessまたはActive Modelを使用するだけです。

于 2012-09-27T19:56:58.503 に答える