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]。それは、人物の ID が何であれ、テーブルの種類の person_id を持つものを見つけます。最初の方法は問題ありません。

実装方法がわからない2番目の方法です。テーブルの構成を設定したい場合は、このようにしたいperson.things[:table] = {:my => "config"}

テーブルが既に存在する場合は問題ありません。しかし、新しい を作成したい場合はどうすればよいthingですか?

通常、モノの作成は次のようになります。

thing = Thing.new({
  person_id => person[:id],
  kind => "table"
  config => {}
})

しかし、私は関連付けの拡張を行っているので、新しいオブジェクトを作成したいのですが、どうすれば個人IDを取得できますか?


ルビー1.8.7
レール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 に答える