ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Einsatz von "hidden_field_tag"
BeitragVerfasst: 26 Mai 2013, 14:47 
Offline
Geselle

Registriert: 18 Dez 2012, 19:44
Beiträge: 140
Ich hatte da mal eine Verständnisfrage zum hidden_field_tag.

Habe ich das richtig verstanden, dass dieser tag innerhalb eines formulars hauptsächlich nur dann zum Einsatz kommt, wenn ein Fremdschlüsselattribut übergeben werden soll, dass unabhängig von der Ressource ist, für die das Formular existiert?

Also in meiner Applikation habe ich zum Beispiel für das Formular zum Eintragen eines Reviews im hidden_field_tag noch die game_id übergeben, damit das review dem spiel zugeordnet werden kann, von wo aus ich das review formular geöffnet habe.



1
2
3
4
5
6
7
8
9
<%= form_for(@review, :url => game_reviews_path) do |f| %>

<div class="field">
<%= f.text_area :content, placeholder: "Compose new review..." %>
</div>

<%= hidsdfden_field_tag("game_id", @game.id) %>

<%= f.submit "Post" %>


dafür sah meine new methode im review controller so aus



1
2
3
4
5
  def new
@review = Review.new
@game = Game.find_by_id(params[:game_id])
@review.game_id = @game.id
end



Wie sich aber rausstellte, brauche ich den hidden_field tag gar nicht und damit auch die zwei letzten zuweisungen in der controller-methode nicht. Über Googeln bin ich auf eine Aussage in stackoverflow gestoßen, wo es eben hieß, das das hidden_field_tag unnötig sei, wenn in den Routes die Ressource verschachtelt ist, in meinem Falle also:



1
2
3
  resources :games do
resources :reviews
end


Ist nun diese Verallgemeinerung korrekt oder ist es nur ein Zufall, dass ich formular das hidden_field_tag weglassen kann und es liegt an etwas ganz anderem? Das war nämlich lange Zeit ein Problem bei meiner App, dass das mit den Reivews nicht geklappt hatte, eben weil ich mich mit der Übergabe der game.id rumärgern musste...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Einsatz von "hidden_field_tag"
BeitragVerfasst: 26 Mai 2013, 15:02 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1283
Wohnort: Thüringen



<%= form_for(@review, :url => game_reviews_path) do |f| %>

Deine URL heißt offenbar game/id/reviews. Also steht die Game-ID schon in der URL kodiert drinne. Sie per hidden-field übergeben macht nur Sinn wenn sie nicht schon in der URL steht (also weder game/3/reviews noch reviews?game=5 oder sonstewas).


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Einsatz von "hidden_field_tag"
BeitragVerfasst: 26 Mai 2013, 18:02 
Offline
Geselle

Registriert: 18 Dez 2012, 19:44
Beiträge: 140
danke, das wollte ich mir jetzt nur so bestätigen lassen. Das macht einiges wieder wesentlich klarer :)

Ist das dann quasi auch der Grund weshalb ich in der create Methode dieser verschachtelten Resource explizit die game_id in der params angeben muss anstatt nur :id?



1
2
3
  def create
@game = Game.find_by_id(params[:game_id])
end


an dieser stelle nur ":id" zu verwenden führt ja zu einem Runtime Error, aber warum?
Es wird doch schon auf das Game-Objekt zugegriffen, warum muss explizit "game_id" angegeben werden?

sorry, wenn ich solch doofe fragen zu elementaren dingen stelle, aber ich möchte das wirklich gerne nachvollziehen können, was da im hintergrund genau passiert :)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Einsatz von "hidden_field_tag"
BeitragVerfasst: 26 Mai 2013, 18:45 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1283
Wohnort: Thüringen
Mit jedem Request werden Parameter übergeben. Sowohl per URL als auch (z.B. für post-Requests) per Formularfelder.

Die URL Parameter sind entweder direkt in die URL kodiert (z.B. games/5/reviews/8 enthält z.B. die Parameter game_id=5, review_id=8) oder hängen am Ende der URL dran (z.B. games?game_id=5&review_id=8).

Welche Parameter direkt in die URL kodiert werden definierst du in routes.rb



get "foo/:param1/bar/:param2" => "MyControler#myAction", :as => :foo

definiert eine URL mit zwei Parametern params[:param1] und params[:param2]. foo/1/bar/2 ruft die Action myAction im Controller MyController auf, übergibt die Parameter param1=1 und param2=2. Erzeugen kann man die URL mit foo_url(:param1 => 1, :param2 => 2). Weitere Parameter werden an die URL angehangen: foo_url(:param1 => 1, :param2 => 2, :bla => 3) gibt also foo/1/bar/2?bla=3 zurück.

Der Befehl resource :game erzeugt mehrere Routes, z.B. die Route



get "games/:id" => "GamesController#show", :as => :game

Da hier der Parameter :id heißt, musst du im Controller logischerweise auch params[:id] schreiben.

Eine nested resource kann natürlich nicht zweimal den Parameter :id verwenden, daher wird der innere Parameter dann z.B. review_id genannt.

Du kannst dir in deinen Logfiles anschauen welche Parameter bei jedem Request übergeben werden. Du kannst dir mit rake routes alle deine Routes anzeigen lassen. Und http://guides.rubyonrails.org/routing.html beschreibt genau welche Routes mit welchen Parametern angelegt werden.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Einsatz von "hidden_field_tag"
BeitragVerfasst: 26 Mai 2013, 21:10 
Offline
Geselle

Registriert: 18 Dez 2012, 19:44
Beiträge: 140
super, vielen dank für die ausführliche Erläuterung Herr Yagami ;)!


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:
cron