我有一个骷髅级:红宝石如何定义作家法“<<”
class Foo
def bar
# returns some sort of array
end
end
,但一个人如何能在“作家”的方法添加到“酒吧”,以便使阵列#推行为?
Foo.new.bar<<['Smile']
_.bar #=> ['Smile']
编辑: 我应该进一步扩展我的问题。 有两个类。 Foo和Bar,非常像ActiveRecord has_many关系,其中Foo has_many酒吧
但是我实际上将Bar的ID存储在Foo的一个方法中。我的名字是方法bar_ids
所以@foo = Foo.new(:bar_ids => [1,2,3])
正如你可以想像,如果我想查什么酒吧属于@ FOO,我必须真正做类似Bar.where(:ID => @ foo.bar_ids)
所以我决定让刚刚入选酒吧做到这一点 类Foo #另一种方法... 高清bar Bar.where(:id => bar_ids) end end
解决了。现在我可以做@ foo.bar#=>所有属于@foo的酒吧
现在我也想拥有像ActiveRecord关联那种推式方法,只是为了在关联另一个酒吧时删除“id”键入反对Foo对象
目前,这个工程: @ foo.bar_ids < < Bar.new.id @ foo.save
但我想: @ foo.bar < < Bar.new#其中新酒吧的ID将被推入@foo的bar_ids方法 @ foo.save
感谢您的全力帮助,我非常感谢您对此的看法!
什么是你究竟从杆法期待?它应该只作为一个Array对象的getter? – David 2010-09-20 14:14:37
@大卫,这是完全正确的。我想要实现的就像ActiveRecord has_many关系,你可以做@ project.line_items << LineItem.create(...) – 2010-09-20 14:20:12
@Nik,'@project.line_items << ...'返回一个'Array',而不是'@ project'。 'Foo.new.bar'不可能返回一个可以同时调用''''和'Foo'对象的数组! – 2010-09-20 14:28:19