私のレールアプリにはPodcastとTrackモデルがあります。ポッドキャストには多くのトラックがあり、トラックはポッドキャストに属しています。私たちは、mixcloudために私たちのオーディオファイルをアップロードRoR - 自己のコンテキストがメソッド内で変化したときに、「古い」自己オブジェクトを参照するにはどうすればいいですか
:
はここで退屈な背景情報です。彼らが主催するショーごとに、彼らは標準的なHTMLバージョンに加えてjson表現を提供します。私たちのアプリは、このjsonフィードを取得して解析し、返されたデータを使用して作成されるPodcastオブジェクトの属性を設定します。
また、フィードを使用して、このPodcastに属するすべてのトラックの名前を取得し、Podcastの作成中にこれらのトラックをデータベースに作成することもできます。
コード多かれ少なかれ作品が、それは設定に失敗した:podcast_idを新しいトラックのいずれかに:
before_validation :create_tracks
def create_tracks
# get json feed for podcast which is hosted hosted on mixcloud.com
json = a_method_that_gets_and_parses_json(self.json_url)
json.sections.each do |section|
if section.section_type=="track"
# track.name IS being set, but podcast_id is NOT being set, it is always null
Track.create(:name=>section.track.name, :podcast_id=>self.id)
end
end
end
私は自己の文脈という問題が起因していることを実感 Track.createメソッド内で使用すると変更されます。これは、.each
ループの外側にself.json_url
を返すときと同じように、Podcastを参照しなくなりました。
ここで自己を使用できない場合は、現在のポッドキャストのIDをTrack.createメソッドに渡すにはどうすればよいですか?私はメソッドの外側と内側に変数を設定しようとしましたが、ここでは何も動作しないようです。レコードについては、トラックが作成されていて、その名前が正しく設定されていて、設定できないpodcast_idだけです。
ありがとう、コードをafter_createメソッドに移動して問題を修正しました。 – stephenmurdoch