In einem meiner Modelle habe ich ein Feld namens token
, das mit before_create
erstellt wird. Es wird nie wieder geändert.Overriden Route ID Feld wird zurückgesetzt
In routes.rb
ich verwende es anstelle von id, wie: resources :model, param: :token
So zum Beispiel der edit
Route jetzt model/:token/edit
ist.
In meinen Aktionen mache ich find_by(:token, params[:token])
.
Ich habe ein Teilformular erstellt mit simple_form
, die in den new
und edit
Aktionen geladen wird.
Das funktioniert gut, die Routen werden ordnungsgemäß generiert, alle zeigen :token:
anstelle von :id
.
Die show
Aktion funktioniert gut. Auf der Show-Seite habe ich eine link_to
, die auf die Bearbeitungsansicht verlinkt. Das funktioniert auch gut.
Beide verwenden :token
in der Route, die Bearbeitungsansicht lädt die Modelle Felder, alles ist normal.
Wenn Sie jedoch den Quellcode für die Bearbeitungsansicht betrachten, wird die Aktion als /model/<id>
anstelle von /model/<token>
angezeigt. Zum Beispiel /model/5
.
Wenn Sie das Bearbeitungsformular senden, versucht es, /model/5/
zu gehen.
Wenn ich zusätzlich die zu sendenden Parameter überprüfe, wird token
auf den Wert id
gesetzt. Irgendwie wurde das Feld token
zurückgesetzt.
So
1) Das token
Feld auf den Wert von id
irgendwie wird zurückgesetzt. Ich habe keine Ahnung, wie das vor sich geht.
2) simple_form
scheint die Aktion basierend auf id
statt token
zu generieren. Allerdings habe ich festgestellt, dass seit token
zurückgesetzt wird, könnte es sein, dass simple_form
ist nichts falsch machen und verwendet den Wert token
.
Die einzige fix i mit, das url
Feld in simple_form_for
manuell unterging, aber wenn ich das tun einfiel, es bricht dann die new
Aktion.
Für simple_form
Ich bin nur tun: <%= simple_form_for @model do |f| %>
In routes.rb
ich tue:
resources :model, param: :token
In der Steuerung, die edit
Aktion:
@model = Model.find_by(token: params[:token])
Die update
Aktion ist:
@model = Model.find_by(token: params[:token])
if @mode.update model_params
redirect_to model_path @model.token
else
render 'edit'
end
Nichts Besonderes im geringsten.
Dieses es fixiert. Ich danke dir sehr. Ich habe das nirgends dokumentiert gesehen. – m5tt
@ m5tt Ich habe das Referenzdokument hinzugefügt, falls Sie mehr darüber erfahren möchten. Fröhliches Hacken! – yeuem1vannam
@ yeum1vannam Ich hätte nie gedacht, dort zu suchen. Ich habe das Gefühl, dass vielleicht etwas im Routing Guide erwähnt werden sollte, wo es um die Option "param" geht. Weil ich vermutete, dass ich "id" nicht richtig überschrieb, aber ich konnte nichts anderes finden, als diese "param" Option zu setzen. Danke noch einmal. – m5tt