2

アップデート:

私はこれを私のpersonクラスに入れました

  has_many :things, :dependent => :destroy do 
    def [](kind)
      where("kind = ?", kind.to_s)
    end
  end

しかし、 を呼び出す<Person Instance>.things[:table]と、次のエラーが発生します。

undefined method `where' for #<Class:0x111dc3ba8>

元の質問:

私にはperson、誰がいhas_many thingsます。次のようなことができるようになりたいです。

<Person Instance>.things[:table]

それは次のように定義されます

def things[](arg)
    self.things.find(:first, :conditions => ["kind = ?", arg.to_s])
end

現在、そのメソッドは私にこのエラーを与えます:

syntax error, unexpected '[', expecting '\n' or ';'

では、things[] を適切に定義するにはどうすればよいでしょうか?

4

2 に答える 2

5

あなたが探しているのは、Rails の関連拡張と呼ばれるものです。 ここでそれについて読んでください

実装は次のようになります。

has_many :things do
  def [](kind)
    where(:kind => kind)
  end
end
于 2012-08-21T17:37:04.670 に答える
-1

メソッド名では許可されていないと思い[]ます...メソッド名でスキップすることもできますが、関連付けを適切に設定すると、関連付けメソッドが上書き/置換されます。

私はこのようなことをします:

# in your Person model
def things_of_kind(kind)
  self.things.find(:first, :conditions => ["kind = ?", arg.to_s]
end

# then you could call
<PersonInstance>.things_of_kind(:table)

あるいは、この手法を使用するが適切な場所にある関連付け拡張機能があります。また、役立つスコープもあります。

于 2012-08-21T17:41:12.453 に答える