如何获取我已扩展的关联对象的ID?

时间:2012-08-22 12:12:29

标签: ruby-on-rails ruby

我有这样的事情:

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

1 个答案:

答案 0 :(得分:1)

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

proxy_association.owner

扩展内?我认为这应该返回Person

文档:RoR Guides

修改:我刚刚注意到,在您的示例中,Person不是ActiveRecord模型?这是一个遗漏吗?

对于Rails 2.3.14,您希望使用AssociationProxy's proxy_owner方法。 然后做things.proxy_owner[:id]