更新
我已将此内容放入我的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 ';'
那么,我该如何正确定义[]?
答案 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,这可能会有所帮助。