Rails 4 starke Parameter Param nicht gefunden Fehler mit Carrierwave
Ich habe Probleme mit carrierwave und Schienen 4 starken Parameter. Ich habe ein sehr einfaches Modell mit einer Trägerwelle Schaltfläche "hochladen". Ich würde gerne eine Fehlermeldung anzeigen, wenn jemand sendet den upload-Formular ohne die Auswahl einer Datei zum hochladen aus.
Recht jetzt, bekomme ich eine param not found:photo
Fehler mit dieser Meldung:
# Never trust parameters from the scary internet, only allow the white list through.
def photo_params
params.require(:photo).permit(:image)
end
Dieser Fehler ist passiert, weil die Schienen 4 die starken Parameter ist erforderlich, dass der image-parameter vorhanden sein, um das Formular senden, aber es ist nicht da, weil der Benutzer noch nicht ein Bild ausgewählt.
Ich kann nicht herausfinden, ein Weg, dies zu umgehen und haben es redirect auf die gleiche Aktion und eine Fehlermeldung angezeigt.
Gibt es eine Möglichkeit, dies zu tun mit starken Parameter?
Hier ist die Entwicklung log, wenn ich versuche, das Formular ohne Foto ausgewählt:
https://gist.github.com/leemcalilly/09b6166ce1af6ca6c833
Und hier ist die Entwicklung log wenn ich wählen Sie ein Foto und es hochgeladen wurde:
https://gist.github.com/leemcalilly/1f1e584f56aef15e7af1
Andere relevante Dateien:
* Modelle/Foto.rb - https://gist.github.com/leemcalilly/95c54a5df4e4ee6518da
* Controller/photos_controller.rb - https://gist.github.com/leemcalilly/c0723e6dc5478b0f914d
* Uploader/image_uploader.rb - https://gist.github.com/leemcalilly/5e43f6524734991773ae
* Ansichten/Fotos/index.html-Code.erb - https://gist.github.com/leemcalilly/a8c4c808e5e8a802933b
* Ansichten/Fotos/_form.html-Code.erb - https://gist.github.com/leemcalilly/cd0fd518c1b47d9bfb62
* Initialisierungen/carrierwaver.rb - https://gist.github.com/leemcalilly/49e04fa1dda891dd108b
InformationsquelleAutor der Frage Lee McAlilly | 2013-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den rails guides liefert die Lösung. Verwenden Sie die
fetch
Methode in der gleichen Weise wie dierequire
Methode. Hinweis ein zweites argument: es liefert den default-Wert. Also, wenn dieparams[:photo]
würde nicht gefunden werden, wird der default-Wert (einen leeren hash, wie das Beispiel unten) zurückgegeben wird:InformationsquelleAutor der Antwort Mrjaco12
Sorry spotted dies ist etwas spät ,Ok jetzt sehen Sie Ihr Formular-code, die wie folgt Aussehen
Nun, es ist dies nicht ein problem mit
rails
odercarrierwave
oderstrong_parameter
es ist etwas wiehtml
funktioniert . Wie diese, wenn Siefile
Eingabe, und wennnothing
angefügt ist diename
undvalue
- pair-Mädchen ist nicht an den server gesendet, die vonHTML
denke, dass es so etwas wiecheckbox
oderdisabled
FeldNun, da Sie Ihre form nur enthalten
<%= f.file_field :image %>
und es enthält keine anderen Feld (Attribute von Foto-Modell)
daher die
photo
hash nicht bekommen würde gebaut, wenn diefile
Eingangdoes not
enthalten einen Anhangdie sich im Protokoll als auch
Parameter (ohne Anhang beigefügt) =>
Parameter (mit Anlage verbunden) =>
jetzt können Sie sehen der Unterschied zwischen den beiden und das ist der Unterschied den Grund Ihrer Fehler, da in
1. Fall
params[:photo].present?
=> false,2. Fall
params[:photo].present?
=> trueund daher, wenn Sie dies tun
params.require(:photo).permit(:image)
den code löst den Fehlerweil der Linie erwähnen, dass
.require(:photo)
dienot
präsentieren inparams
Lösung:-
Vielleicht können Sie so etwas tun
Fazit :-
Es nicht jemand Schuld, weil das ist, wie die
HTML
funktionieren, wennno
Anlageno
name=value
pair vorgelegt, die server und wegen derenphoto
params nicht zum server gesendet damit der hash nicht, haben Sie und somit starke parameter, der den Fehler auslöstHoffe, dass dies helfen
InformationsquelleAutor der Antwort Viren