27-09-2011, 12:21 AM
(Modification du message : 02-10-2011, 08:52 PM par Sephi-Chan.)
Salut! C'est encore bibi, je suis en train de m'arracher le peu de cheveux qui me restes (je les ai joué à pile ou face il y a de ça 15jours...), sur ce tout petit bout de code:
Le SQL généré est parfait comme je le veut:
Lorsque j'exécutes ce bout de SQL directement dans ma BDD j'obtiens les valeurs: x = -12 y = -18
Lorsque j'exécute le code ruby j'obtiens dans la console grâce au debug les valeurs: x = -12 y = 0
Est-ce que vous voyez quelque chose de louche?
Le code entier de la fonction est le suivant:
Merci beaucoup pour toutes pistes, ça va faire 24h que je suis dessus, ça commences à me trotter même au boulot ^^.
last_created_city = City.select("position[0] as x, position[1] as y").last
unless last_created_city.nil?
x = last_created_city.x.to_f
y = last_created_city.y.to_f
logger.debug "--------------------------DEBUG----------------------"
logger.debug "x = #{x} y = #{y}"
end
Le SQL généré est parfait comme je le veut:
SELECT position[0] as x, position[1] as y FROM "cities" ORDER BY "cities"."id" DESC LIMIT 1
Lorsque j'exécutes ce bout de SQL directement dans ma BDD j'obtiens les valeurs: x = -12 y = -18
Lorsque j'exécute le code ruby j'obtiens dans la console grâce au debug les valeurs: x = -12 y = 0
Est-ce que vous voyez quelque chose de louche?
Le code entier de la fonction est le suivant:
def self.where_to_live!
x = 0
y = 0
last_created_city = City.select("position[0] as x, position[1] as y").last
unless last_created_city.nil?
x = last_created_city.x.to_f
y = last_created_city.y.to_f
logger.debug "--------------------------DEBUG----------------------"
logger.debug "x = #{x} y = #{y}"
x /= SPACE_BETWEEN_CITIES
y /= SPACE_BETWEEN_CITIES
x = x.floor
y = y.floor
logger.debug "Floor:"
logger.debug "x = #{x} y = #{y}"
if x == y
logger.debug "x = y"
axis = "x"
direction = x < 0 ? "+" : "-"
elsif x.abs == y.abs
logger.debug "x.abs == y.abs"
axis = y > 0 ? "x" : "y"
direction = y > 0 ? "-" : "+"
elsif x.abs > y.abs
logger.debug "x.abs > y.abs"
axis = "y"
direction = x > 0 ? "+" : "-"
elsif y.abs > x.abs
logger.debug "y.abs > x.abs"
axis = "x"
direction = y > 0 ? "-" : "+"
else
raise ArgumentError, "Error occured"
end
logger.debug "Direction: #{direction}"
if axis == "x"
x = direction == "+" ? x+1 : x-1
elsif axis == "y"
y = direction == "+" ? y+1 : y-1
else
raise ArgumentError, "Error occured"
end
end
x = x*SPACE_BETWEEN_CITIES + rand(CITIES_RANDOM_AREA)
y = y*SPACE_BETWEEN_CITIES + rand(CITIES_RANDOM_AREA)
"(#{x},#{y})"
end
Merci beaucoup pour toutes pistes, ça va faire 24h que je suis dessus, ça commences à me trotter même au boulot ^^.