PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Rails] Controller/path_helper Name


Gast
2010-05-31, 21:13:56
Hi,

ich bastele gerade an einer ruby on rails app und stehe vor folgendem Problem: Um das ganze ding möglichst generisch zu halten haben meine Models/Controller folgende Namen: level1, level2, level3 usw. Es geht wie unschwer zu erkennen um die Abbildung von hierachischen Strukturen.
Nun möchte ich, um das ganze programmiertechnisch etwas angenehmer zu gestalten, andere Namen für die Controller vergeben, z.b. Jahr für level1, Monat für level2, Woche für level3 usw. Das klappt ja mit :controller => blablub beim Erstellen des Routing in routes.rb
Weiters möchte ich dass die Links entsprechende Namen haben, auch das klappt mit :as => bla.
Und ich möchte dass die automatisch generierten path helper auch die entsprechenden Namen haben, sodass ich woche_path(w) nutzen kann um im Code z.b. mit link_to zur entsprechenden Woche zu linken. Das klappt leider nicht und ich komm nicht drauf wie ich das hinbekomme.

Hat jemand eine Idee?

universaL
2010-05-31, 22:56:12
Warum keine richtige baumstruktur mit Acts_As_Tree /nested set zum Beispiel?

map.resources :weeks ?

Da ich keine Ahnung hab was du schon alles weisst:

http://guides.rubyonrails.org/routing.html

Gast
2010-06-01, 00:40:24
Vielen Dank, das sieht sehr brauchbar aus und auch
map.resources :years, :controller => :level1
war genau das richtige, hab wohl vor lauter Bäumen den Wald nicht gesehen. Jetzt habe ich schöne Pfade und helper, allerdings regt er sich an hier

<% form_for(@year) do |y| %>

auf dass er level1_path nicht kennt (undefined method). @year ist eine variable vom model level1. Warum nimmt er hier den alten path (und nicht year_path), und wie kann ich das beheben?
Im Moment hab ich einfach beim Routing nochmal ein map.resources :level1 gemacht, damit funktionierts aber ist halt nicht gerade sauber.

universaL
2010-06-01, 16:46:18
du versuchst eine polymorphic url (iirc) zu benutzen, das funzt so aber nicht. die "magie" funzt nur für den normalen use case.

year_path(@instance)

ansonsten auch vieleicht interessant für dich:
http://www.tricksonrails.com/2010/05/i18n_routing-translate-your-rails2-rails3-routes-with-ease/

Marscel
2010-06-01, 20:26:03
map.resources :level1

Ich hatte den Fall bisher nicht, aber sollte das nicht die fehlenden Helper hinzufügen? (Bin mir nicht mal sicher, wie sich das hier mit der pluralization richtig verhält)

Gast
2010-06-03, 23:39:08
map.resources :level1

Ich hatte den Fall bisher nicht, aber sollte das nicht die fehlenden Helper hinzufügen? (Bin mir nicht mal sicher, wie sich das hier mit der pluralization richtig verhält)
Ja tut es eh, aber der Punkt ist ich brauche die level1 routes/helper ja gar nicht (Es heißt übrigens natürlich level1s, habs nur zur Verdeutlichung im Singular gelassen ;) - level1s klingt auch irgendwie blöd ). Wie auch immer, mit dem Tip von universaL funktionierts.

Gast
2010-06-04, 12:12:48
Hi,

jetzt habe ich noch eine andere Frage:
Ich möchte gerne in meiner rails app Links erzeugen die auf den lokalen Rechner zeigen, sodass z.b. verlinkte Bilder oder Musikdateien nicht vom Server geladen werden sondern von der lokalen Festplatte. Geht das überhaupt? Ich habe auch nach einigermaßen intensiver Suche nichts entsprechendes gefunden, allerdings weiß ich auch icht so recht wonach ich suchen soll...

Gast
2010-06-04, 12:48:03
Was willst du verlinken? Mediendateien kannst du in den public-Ordner tun und direkt über '/' abrufen.

Und wenn du die Link-helper meinst: http://guides.rubyonrails.org/routing.html#urls-and-paths

Gast
2010-06-04, 13:12:46
Oho:
http://en.wikipedia.org/wiki/File_URI_scheme#Mozilla

Aha:
http://kb.mozillazine.org/Firefox_:_Issues_:_Links_to_Local_Pages_Don't_Work

Naja, gestern wars anscheinend schon spät... ;)


Was willst du verlinken? Mediendateien kannst du in den public-Ordner tun und direkt über '/' abrufen.

Ja ich weiß, ich will aber dass die Mediendateien vom lokalen Rechner geladen werden, nicht vom Server. Am Server hab ich quasi nur die Datenbank zur bequemen Verwaltung/Suche/Browsing, die eigentlichen Dateien lade ich dann von lokal. Mit url_for("file:///<blablub>") nach Anwendung obiger Enstellung funktionierts. Muss man halt den Pfad für url_for aus den in der DB gespeichterten Pfaden zusammenbasteln.

Und wenn du die Link-helper meinst: http://guides.rubyonrails.org/routin...urls-and-paths

Gast
2010-06-15, 21:33:53
Hi,

ich habe eine neue Frage ;) :
Ist es normal dass wenn ich Daten aus meiner Datenbank lösche die freigewordenen primary keys (xxx.id) nicht wiederverwendet werden? Ich habe schon die komplette DB gelöscht

@images = Image.find(:all)
@images.each { |i| i.destroy }

und die Datenbank ist anschließend auch erwartungsgemäß leer (Image.find(:all).length ist 0), aber wenn ich sie weider neu befülle beginnen die ids nicht bei 1... Image.find(1).id ist dann 274 oder so. Gehört das so?

Gast
2010-06-21, 15:54:42
Hi,

ich habe eine neue Frage ;) :
Ist es normal dass wenn ich Daten aus meiner Datenbank lösche die freigewordenen primary keys (xxx.id) nicht wiederverwendet werden? Ich habe schon die komplette DB gelöscht

@images = Image.find(:all)
@images.each { |i| i.destroy }

und die Datenbank ist anschließend auch erwartungsgemäß leer (Image.find(:all).length ist 0), aber wenn ich sie weider neu befülle beginnen die ids nicht bei 1... Image.find(1).id ist dann 274 oder so. Gehört das so?
Niemand?

Marscel
2010-06-21, 20:30:38
Wenn es das ist, was ich denke, musst du den auto_increment-Wert (bei MySQL, bei SQLite weiß ichs nicht) wieder auf 0 setzen, der zählt sonst ab dem letzten Eintrag weiter.