Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zu link_to und *_path
BeitragVerfasst: 02 Apr 2012, 15:39 
Offline
Novize

Registriert: 01 Apr 2012, 20:29
Beiträge: 17
Hallo,

ich verstehe nicht so recht wie ich verschiedene Views miteinander verknüpfe.
Ich habe ein vertikales Menü mit mehreren Links...
Der Home-Button funktioniert,
link_to "Home", root_path
Will ich jetzt auf einen anderen View verweisen, beispielsweise;
link_to "Dinge", dinge_path
erhalte ich immer einen RoutingError
uninitialized constant DingesController
Dabei habe ich in meiner routes.rb
ressource :dinge angegeben und einen Controller Dinge erstellt.
Benutze ich statt resource:, resources: erhalte ich den Fehler
ActiveRecord::StatementInvalid in DingeController#index

Could not find table 'dinges'

Ich verstehe nicht wozu er eine Table will?!
Und was bedeutet der erste Fehler?

Ich hoffe mir kann jemand weiterhelfen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frage zu link_to und *_path
BeitragVerfasst: 02 Apr 2012, 16:18 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1228
Wohnort: Thüringen
Du verbindest keine Views miteinander. Jeder Link steht für eine Anfrage an den Server, die eine Action eines Controllers ausführt. Ressourcen sind eine besondere Betrachtungsweise, bei der ein Datenbankmodell (bzw. auch jede andere Form von Modell) durch eine URL aufgerufen und manipuliert werden kann. Wenn ich also eine Resource User habe, dann gibt es eine URL um diesen User anzusprechen, eine URL um ihn zu manipulieren, aber auch URLs um einen neuen user zu erstellen etc. Dabei nutzt Rails Namenskonventionen. Daher ist es empfehlenswert englische (!!!) Namen zu verwenden.

Die Vorgehensweise sollte eigentlich die folgende sein:
- du definierst eine Ressource things
ressources :things
- du erstellst einen Controller ThingsController
- du erstellst Actions: index, show, edit, new, update, create, destroy
- things_path sollte dann auf die Action ThingsController#index verweisen


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frage zu link_to und *_path
BeitragVerfasst: 02 Apr 2012, 19:22 
Offline
Novize

Registriert: 01 Apr 2012, 20:29
Beiträge: 17
Hallo Kai,

danke für die Antwort.
Ich benutze normalerweise auch englische Namen, dies war jetzt aber nur ein (schlechtes) Beispiel. :P

Ich habe den Controller Things und die Methoden implementiert.
Jetzt komme ich schon weiter, aber es gibt noch ein Problem mit der routes.rb.

Routing Error

No route matches {:action=>"show", :controller=>"things"}

Dort habe ich nur resources: things stehen, ich denke es fehlt noch etwas?!
Aus dem Vorhandenen; root :to => 'home/index'
kann ich auf keine Lösung schließen...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frage zu link_to und *_path
BeitragVerfasst: 02 Apr 2012, 20:59 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1228
Wohnort: Thüringen
Also der Unterschied zwischen resources und resource ist ob deine Ressource mehrfach vorkommt oder nicht. Bei resources gibt es eine index Action um alle Ressourcen aufzulisten, sowie eine show Action um eine bestimmte Ressource anzuzeigen. Die show Action verlangt dann aber auch einen Index, der angibt, welche Ressource angezeigt werden soll. things_url sollte auf die index Action verlinken, thing_url(id) sollte auf die show Action mit gegebener Id verlinken.

Zitat:
Aus dem Vorhandenen; root :to => 'home/index'
kann ich auf keine Lösung schließen...

Hier ist der Routing-Mechanismus von Rails erklärt.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Frage zu link_to und *_path
BeitragVerfasst: 02 Apr 2012, 21:41 
Offline
Novize

Registriert: 01 Apr 2012, 20:29
Beiträge: 17
Das hatte ich mir bereits durchgelesen und versucht nachzuvollziehen, bevor ich den Thread eröffnet habe.
Irgendwie scheint es bei mir nicht funktionieren zu wollen.

Ich habe einen Controller thing_controller.rb, einen View erstellt, der Ordner heißt "thing" und in ihm liegt die Datei "index.html.erb".
Von meiner Home-Seite versuche ich thing aufzurufen, aber es klappt nicht.
  • <%=link_to "Thing", thing_path %>


  • In der routes.rb steht;
    resource :thing

    match "thing" => "thing#show" # mit oder ohne ist egal

    Ich erhalte immer die Fehlermeldung:

    Routing Error

    uninitialized constant ThingsController

    Ich verstehe nicht wieso dort vom Plural die Rede ist, noch weshalb es gar nicht funktionieren will.

    Erstelle ich mittels generate eine Resource, kann ich diese ohne Probleme aufrufen, dabei habe ich thing bereits
    mit der Generierten abgeglichen und es funktioniert weiterhin nicht.


    Nach oben
     Profil  
     
     Betreff des Beitrags: Re: Frage zu link_to und *_path
    BeitragVerfasst: 02 Apr 2012, 22:58 
    Offline
    Interpreter
    Benutzeravatar

    Registriert: 21 Mai 2007, 11:30
    Beiträge: 1228
    Wohnort: Thüringen
    Sowohl bei resource als auch bei resources wird der Plural verwendet. Steht auch so im Guide.
    Zitat:
    Because you might want to use the same controller for a singular route (/account) and a plural route (/accounts/45), singular resources map to plural controllers.


    match("thing" => "Thing#show") müsste funktionieren. Aber die Routen werden wohl von oben nach unten eingelesen. Die Route "thing"=>"Things#show", die vom resource-Aufruf erzeugt wird, wird also bevorzugt.

    Wenn du unbedingt ThingController statt ThingsController haben willst, kannst du auch den Controller manuell angeben:
    resource :thing, :controller => "thing"


    Nach oben
     Profil  
     
     Betreff des Beitrags: Re: Frage zu link_to und *_path
    BeitragVerfasst: 07 Apr 2012, 20:52 
    Offline
    Meister

    Registriert: 10 Dez 2009, 14:39
    Beiträge: 212
    Ich will mal noch

    rake routes

    in den Raum werfen - das hilft beim Debuggen/Überblick verschaffen ungemein.

    _________________
    Sorry, wenn ich doofe Fragen stelle, stehe noch ganz am Anfang :oops:


    Nach oben
     Profil  
     
    Beiträge der letzten Zeit anzeigen:  Sortiere nach  
    Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

    Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


    Wer ist online?

    Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


    Du darfst keine neuen Themen in diesem Forum erstellen.
    Du darfst keine Antworten zu Themen in diesem Forum erstellen.
    Du darfst deine Beiträge in diesem Forum nicht ändern.
    Du darfst deine Beiträge in diesem Forum nicht löschen.
    Du darfst keine Dateianhänge in diesem Forum erstellen.

    Suche nach: