0
私はRails3を使い慣れていません。状況は次のとおりです(コードが恐ろしい場合は、是非教えてください)。rails3 has_one関連モデルの作成
ダイビングをログに記録します。私はその地点で新しい地点を作って、新しい地点を作成してからダイビングを作成する必要があります。ダイビングは一箇所にあります。場所には数多くのダイビングがあります。現在、外部キーはlocation_idとしてダイビング中です。
dives_controllerで場所を生成してIDを取得し、それを新しいダイビングに渡すにはどうすればよいですか?場所のコンストラクタを呼び出すのはいいでしょうが、それがうまく動作しない場合は、それも問題ありません。
私のコードは以下の通りです:
class Dive < ActiveRecord::Base
belongs_to :user
has_one :location
end
require 'json'
require 'net/http'
require 'uri'
class Location < ActiveRecord::Base
has_many :dive
def initialize(location)
@name = location[:name]
@city = location[:city]
@region = location[:region]
@country = location[:country]
url = "http://maps.googleapis.com/maps/api/geocode/json?address="+location[:city].sub(' ', '+')+"+"+location[:region].sub(' ', '+')+"+"+location[:country].sub(' ', '+')+"&sensor=false"
resp = Net::HTTP.get_response(URI.parse(url))
googMapsResponse = JSON.parse(resp.body)
@latitude = googMapsResponse["results"][0]["geometry"]["location"]["lat"]
@longitude = googMapsResponse["results"][0]["geometry"]["location"]["lng"]
end
def to_str
"#{self.name}::#{self.city}::#{self.region}::#{self.country}"
end
end
class DivesController < ApplicationController
def create
@dive = Dive.new(params[:dive])
if params[:location][:id] == "" then
@location = create_location(params[:location])
@dive.location_id = @location.id
else
@dive.location_id = params[:location][:id]
end
@dive.user_id = params[:user][:id]
end
end