Opis:
Ładuje plik GPX/XML i potrzebne mi są z niego tylko współrzędne. które są filtrowane aby minimalna odległość miedzy nimi była 50m.
User może mieć unikatowe nazwy plików bazie, na podstawie nazwy są wyświetlane markery na mapie.
Napisałem controller / model, wszystko działa.
Teraz pytanie czy to jest “ładnie/poprawnie napisane”,
CONTROLLER :
def create
@location_file = @user.locations.new
if @location_file.save_location(params[:location],@user)
flash[:notice] = "Poprawnie dodano plik"
else
flash[:alert] = @location_file.errors.full_messages.join("<br>")
end
redirect_to user_path(@user)
end
MODEL:
[code] def save_location(gpx2,user)
file_name = gpx2[:name].downcase.to_s
if file_exist?(gpx2) && file_name_exist?(file_name) && user_loaction_exist?(file_name,user)
file = read_file(gpx2)
hash = gpx_to_hash(file)
new_hash = Geolocation.separation(hash)
Location.transaction do
new_hash.each do |nh|
Location.create(:name => file_name,
:lat=>nh[:lat],
:lng=>nh [:lon],
:user_id => user.id )
end
end
else
false
end
end
private
sprawdzam czy plik został wysłany
def file_exist?(file)
if file[:gpx].nil?
errors.add(:gpx, “Nie wybrano pliku GPX!” )
false
else
true
end
end
#sprawdza czy nazwa pliku nie jeste pusta
def file_name_exist?(name)
if !name.blank?
true
else
errors.add(:name, “Nazwa nie moze byc pusta!”)
false
end
end
sprawdza czy dany user posiada współrzedne o takiej nazwie
def user_loaction_exist?(name,user)
object = user.locations.find_by_name(name)
if object.nil?
true
else
errors.add(:name, “Wspolrzedne o podanej nazwie istnieja” )
false
end
end
#zczytuje plik xml
def read_file(gpx)
gpx[:gpx].read
end
#zamieniam plik na hash wyodrebniajac zakladke wpt
def gpx_to_hash(file)
Hash.from_xml(file).with_indifferent_access[:gpx][:wpt]
end[/code]