我怎样才能在关联上定义方法?

时间:2012-08-21 17:32:39

标签: ruby-on-rails ruby

更新

我已将此内容放入我的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>

原始问题:

我有personhas_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 ';'

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

2 个答案:

答案 0 :(得分:4)

您正在寻找的内容称为rails中的关联扩展。 Read about it here

您的实施可能类似于:

has_many :things do
  def [](kind)
    where(:kind => kind)
  end
end

答案 1 :(得分:-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)

或者有association extensions使用这种技术,但在适当的地方。 还有scopes,这可能会有所帮助。