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 ';'

那么,我该如何正确定义事物[]?

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)

Alternatively there are association extensions which use this technique but in the proper place. And there are also scopes, which can be helpful.

于 2012-08-21T17:41:12.453 回答