Je suis nouveau sur Rails3, et j'essaie juste d'avoir une dernière chose à faire avant de l'appeler une nuit. La situation est la suivante (s'il vous plaît si le code est horrible, faites le moi savoir, encore en train d'apprendre):rails3 has_one création d'un modèle d'association
Je veux enregistrer une plongée. Je pourrais avoir un nouvel emplacement sur cette plongée à quel point je dois créer un nouvel emplacement, puis créer la plongée. Une plongée a un seul endroit. Un emplacement a_many plongées. Actuellement, la clé étrangère est en plongée sous le nom location_id.
Comment puis-je correctement, dans mon Dives_Controller, générer l'emplacement, obtenir l'ID et le transmettre à ma nouvelle plongée? Ce serait bien que le constructeur de Location soit appelé, mais si ça ne marche pas comme ça, alors ça ira aussi.
Mon code est ci-dessous:
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