0

私は2つの非常に単純なモデルを持っています:

class Teacher < ActiveRecord::Base
  has_one :fee, :foreign_key => 'teacher_id'
end

...

class Fee < ActiveRecord::Base
  belongs_to :teacher
end

「find」メソッドで教師情報をロードすると、教師テーブル情報のみが存在します。(料金テーブルにデータあり)

@teacher = Teacher.find(id)

debug メソッドを使用すると、次のようになります。

--- !ruby/object:Teacher
attributes:
  id: 7
   …
  presentation: 
  presentation_flag: true
  created_at: 2013-09-16 00:38:14.000000000 Z
  updated_at: 2013-09-16 00:38:14.000000000 Z
  status: 
  last_login: 
  first_name: 
…

しかし、料金表については何もありません。何か案は ?ありがとうございました

4

1 に答える 1

1

これは仕様によるものです。ActiveRecordデフォルトでは「lazy」で、初めてfeeアクセスしたときにのみデータをフェッチします。@teacher.fee

両方を同時にロードしたい場合は、次のincludesように追加して「eager loading」を使用する必要があります。

@teacher = Teacher.includes(:fee).find(id)

「eager loading」の参考文献をいくつか示します。

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations http://railscasts.com/episodes/22-eager-loading-revised

于 2013-09-16T02:24:17.627 に答える