我有这样的事情:
class Person < ActiveRecord::Base
has_many :things do
def [](kind)
find(:first, :conditions => ["kind = ?", kind.to_s])
end
def []=(kind, config)
thing = self[kind]
if thing.nil?
#create new thing
ap self # prints all things that person has
else
# update
end
end
end
使用上面的代码,我可以做类似person.things[:table]
的事情,它会找到一个与person_id相关的东西,无论是谁的id,还是表格的种类。第一种方法很好。
这是我不知道如何实现的第二种方法。
如果我想设置表的配置,我想这样做person.things[:table] = {:my => "config"}
如果表已经存在,那就没问题。
但是,如果我想创建一个新的thing
?
通常情况下,创建Thing会是这样的:
thing = Thing.new({
person_id => person[:id],
kind => "table"
config => {}
})
但是,由于我正在进行关联扩展,并且想要创建一个新对象,我该如何获取该人员ID?
使用
红宝石1.8.7
rails 2.3.14
答案 0 :(得分:1)
我最近没有用过这个,但你试过吗
proxy_association.owner
扩展内?我认为这应该返回Person
。
文档:RoR Guides。
修改:我刚刚注意到,在您的示例中,Person
不是ActiveRecord模型?这是一个遗漏吗?
对于Rails 2.3.14,您希望使用AssociationProxy's proxy_owner
方法。
然后做things.proxy_owner[:id]