8
Czy to możliwe, aby stworzyć coś czystszego z tego dynamicznego zapytania:Tworzenie dynamicznych zapytań w zależności od parametru przeszedł w szynach 3
@photos = Photo.within(100, :origin => [params[:latitude], params[:longitude]]) unless (params[:latitude].nil? || params[:longitude].nil?)
if @photos.nil? then
conditions = String.new
values = Array.new
params.each_key do |key|
if key == 'since_id' then
conditions << " AND " unless conditions.length == 0
conditions << "id > ?"
values << params[key]
elsif key == 'user_id' then
conditions << " AND " unless conditions.length == 0
conditions << "user_id = ?"
values << params[key]
elsif key == 'id' then
conditions << " AND " unless conditions.length == 0
conditions << "id = ?"
values << params[key]
end
end
values.insert(0, conditions)
@photos = Photo.limit(15).order("created_at DESC").where(values) unless values.nil?
end
Tak jest. Ponieważ nie ma sensu mieć id jako params i since_id (powinny one wzajemnie się wykluczać) –
Zapytanie, które generuję, jest OK. Chcę zrobić to ładniej. Myślę, że to nieporęczne, jak to ułożyłem. Szukam alternatyw, które sprawiłyby, że byłaby łatwiejsza w utrzymaniu –
, jeśli wszystko jest w porządku, tylko "id" lub "since_id" jest obecne. Do czego służy funkcja "Photo.within"? – Bohdan