Ruby Forum Rails Germany > DRY Hilfe - ich muss RY

Posted by Rails Camper (railscamper)
on 24.04.2008 21:44
(Received via mailing list)
Hallo Liste,

ich hoffe ich muss DRY.
Ich habe einen KartenController und die zugehörigen Views (freiburg,
weimar, erfurt)

In den einzelnen views baue ich mir die image_url der Fotos über ein
einfaches

KartenController:

def weimar
@foto = Foto.find(:all)
end

def freiburg
@foto = Foto.find(:all)
end

def erfurt
@foto = Foto.find(:all)
end

Um dann in der entsprechenden View darüber interieren zu können und die
einzelnen Fotodaten auszugeben.

view: weimar.html.erb
<% @foto.each do |foto| %>
<%= foto.image_url %>
<%= foto.beschreibung %>
<% end %>

view: efurt.html.erb
<% @foto.each do |foto| %>
<%= foto.image_url %>
<%= foto.beschreibung %>
<% end %>


Das ist aber nicht nur RY sondern einfach nur schlechter Stil.
Posted by Michael Voigt (Guest)
on 24.04.2008 21:55
(Received via mailing list)
Hallo,

vielleicht etwas meta programming, mir würde da sponan soetwas einfallen:

Class karten_controller < ApplicationContoller

class_eval <<-EOV
    Def controller.action_name
        @fotos = Foto.find(:hast_du_noch_nicht_gesehen)
    end
EOV

end

Sowas vielleicht?


Herzliche GRÜßE,
MICHAEL

Am 24.04.2008 21:43 Uhr schrieb "Mario Schroeder" unter
<schroedi2001@gmail.com>:
Posted by Thomas Winkler (Guest)
on 24.04.2008 22:13
(Received via mailing list)
Hallo,

nicht eher einfacher in der Art?

routes.rb
map.connect 'karten/:city', :controller => :maps, :action => 'show'

app/controllers/maps_controller.rb
class MapsController < ApplicationController
  def show
    @fotos = Foto.find :all
    render :action => params[:city]
  end
end

dann kannste in app/views/ deine views anlegen

weimar.html.erb mit

<% @fotos.each do |foto| %>
<%= foto.image_url %>
<%= foto.beschreibung %>
<% end %>

oder aber ganz einfach - wenn sich da nichts aendert: Nimm das render
aus der controller-action
raus, nimm eine show.html.erb view und zeig da einfach die fotos an.

wenn du immer die passenden bilder zeigen moechtest, du schreibst in
deiner mail immer
@fotos = Foto.find :all
und so wuerden ja immer die gleichen Bilder ueberall gezeigt,
dann kannst du das mit

@fotos = Foto.find_all_by_city params[:city]

regeln, vorrausgesetzt du hast die stadt (city) als feld in der db.
Aber das musst du an
deine DB-Gegenheiten anpassen.

Natuerlich muesstest du checken, ob params[:city] auch gesetzt ist und
ggf ein 404 schicken.
Getestet hab ich den Sourcecode oben nicht, ist ausm Kopf geschrieben...

Gruss,
Tom
Posted by Thomas R. Koll (Guest)
on 24.04.2008 22:14
(Received via mailing list)
Hi,

Der moderne Dorfbewohner macht sowas über routes:

w%{erfurt weimar freiburg hintertupfing}.each do |city|
   map.connect 'karten/#{city}/:action/:id', :controller
=> :karten, :city => city
   map.connect 'karten/#{city}/:action/:id.:format', :controller
=> :karten, :city => city
end

ciao, tom

Am 24.04.2008 um 21:43 schrieb Mario Schroeder:
>
> end
> view: efurt.html.erb
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

--
Thomas R. "TomK32" Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: tomk32@gmx.de