Я новичок в Rails3, и я просто пытаюсь заставить последнюю вещь сработать, прежде чем назвать это ночью.Ситуация следующая (пожалуйста, если код ужасен, просто дайте мне знать, все еще учитесь):
Я хочу записать погружение.У меня может быть новое местоположение в этом погружении, и в этот момент мне нужно создать новое местоположение, а затем создать погружение.Место для дайвинга has_one.Место имеет множество погружений.В настоящее время внешний ключ находится в состоянии погружения как location_id.
Как правильно в моем dives_controller создать местоположение, получить идентификатор и передать его в мое новое погружение?Было бы неплохо вызвать конструктор Location, но если он не работает таким образом, то это тоже нормально.
Мой код ниже:
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