0
# models
class A < ActiveRecord::Base
    has_many :b

class B < ActiveRecord::Base
    belongs_to :a

# controllers
class aController < ApplicationController
    def a_with_b
        @a_with_b = A.find(1, :include => [:b])
        puts @a_with_b # => #<A id:1> // `b` not mapped to `@a_with_b`
        puts @a_with_b.b # => [#<B id:1>, #<B id:2>] // still there's `b`
    end
end

質問:
どのbようにマッピングできます@a_with_bか?
期待される:

puts @a_with_b # => #<A id:1 b:[#<B id:1>, #<B id:2>] >

上記のすべての実際の理由は、適切な構造でシリアル化されたオブジェクトを取得できるようにするためです。

{something: true, nothing: false, a: @a_with_b}.to_xml # =>

<xml>
  <something>true</something>
  <nothing>false</nothing>
  <a>
    <id>1</id>
    <bs>
      <b> <id>1</id> </b>
      <b> <id>2</id> </b>
    </bs>
  </a>
<xml>

Rails v.2.3

4

2 に答える 2

1

JSONでデータをシリアル化する場合は、次のように実行できます。

@a_with_b = A.find(1, :include => [:b])
puts @a_with_b.to_json(:include => [:b]) # return a JSON encoded string
puts @a_with_b.as_json(:include => [:b]) # return a Hash
于 2012-12-30T11:07:51.300 に答える
0

私はこれの実装に少し時間を費やしましたが、データがデータベースからプルされ、activerecordオブジェクトキャッシュに入れられるように見えます。そのため、それらを参照する場合、データベースは必要ありません。クエリ。オブジェクトが希望どおりにネストされてしまうことはありませんが、これが問題になる理由は考えられません

つまり、生成されているSQLクエリが期待を満たさないことがわからない限り、これはおそらく望ましい動作です。

于 2012-12-30T09:27:39.163 に答える