DO usunięcia konkretne współrzędne geograficzne należące do danej nazwy pliku i przypisane do danego User’ra
CONTROLLER:
def destroy
if Location.delete_all("user_id = #{@user.id} AND name ='#{params[:id]}'" )
flash[:notice] = "Poprawnie usunieto plik: #{params[:id]}"
else
flash[:alert] = "Blad usuwania pliku #{params[:id]}"
end
redirect_to profile_user_index_path(:id => @user.id)
end
czy może tak lepiej
CONTROLLER:
[code]
def destroy
@location = Location.new
if @location.delete_locations(@user.id, params[:id] )
flash[:notice] = "Poprawnie usunieto plik: #{params[:id]}"
else
flash[:alert] = "Blad usuwania pliku #{params[:id]}"
end
redirect_to profile_user_index_path(:id => @user.id)
end[/code]
MODEL:
#usuwanie pliku gpx dla danego użytkownika
def delete_locations(id,name)
Location.delete_all(["user_id = ? AND name = ?",id,"#{name}"])
end
W sumie 2 opcja ładniejsza Ale zapytam.
Myślę, że oba fragmenty wymagają poprawek, proponuję zgłębić trochę lepiej podstawy oop
Jeżeli w metodzie obiektu, nie odwołujesz się do tego obiektu, to powinna to być metoda klasowa. Druga sprawa, jeśli location ma user_id, to czemu nie masz “User has_many :locations”.
[code=ruby]# model User
class User
has_many :locations
end
controller
if @user.locations.with_name(params[:id]).delete_all
(…)
model Location
class Location
def self.with_name(value)
where(name: value)
end
end[/code]
EDIT:
Inna sprawa, że tak się zastanawiam, czy ten if jest tam na miejscu. To nie jest tak, że metoda zwróci liczbę usuniętych rekordów? 0 ma też wartość true, a jeśli sypnie wyjątkiem, to if tutaj na nic.
[quote=sarniak]Myślę, że oba fragmenty wymagają poprawek, proponuję zgłębić trochę lepiej podstawy oop
Jeżeli w metodzie obiektu, nie odwołujesz się do tego obiektu, to powinna to być metoda klasowa. Druga sprawa, jeśli location ma user_id, to czemu nie masz “User has_many :locations”.
[code=ruby]# model User
class User
has_many :locations
end[/code]
[/quote]
W zasadzie źle zadałem pytanie bo chodziło mi o styl czy jest to po “rubio’wemu” napisane. Więc nie dodawałem całych Class, bo one tam działają mi mają co mają mieć żeby relacje działały
Ale dzięki (za mało kodu wklepałem w rubim ) zapomniało się o łączeniu metod w rubim
Myślę, że nie do końca zrozumiałeś o co mi głównie chodziło. Abstrahując od tego, że ładniej jest to zrobić na relacji (wtedy nie przekazujesz do delete_all conditions a i tak zapytanie sql wygląda tak samo), największym problemem było to:
@location = Location.new
@location.delete_locations(...)
Chodzi o to, że to nie jest ani w stylu ruby’ego ani żadnego języka OO, bo nie powinieneś wołać metody, która powinna być klasowa na rzecz obiektu. To czy zamknąć to w metodę, czy nie to już inna sprawa.