0

我有这样的事情:

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.new({
  person_id => person[:id],
  kind => "table"
  config => {}
})

但是,由于我正在做一个关联扩展,并且想要创建一个新对象,我如何获取人员 ID?

使用
ruby​​ 1.8.7
rails 2.3.14

4

1 回答 1

1

我最近没用过这个,你试过了吗

proxy_association.owner

在扩展内?我相信这应该返回Person

文档:RoR 指南

编辑:我刚刚注意到在您的示例中, aPerson不是 ActiveRecord 模型?那是遗漏吗?

对于 Rails 2.3.14,您想使用AssociationProxy 的 proxy_owner方法。然后就做things.proxy_owner[:id]

于 2012-08-22T12:26:04.667 回答