2013-04-20 4 views
5

Ich verwende strong_parameters gem mit Rails 3.2. Um ein Bild-Upload-Prozess zu testen, habe ich eine eingehende Post-Anforderung mit den Parametern:Wie gestatte ich Rack :: Test :: UploadedFile mit starken Parametern?

{"photo"=>{"image"=>#<Rack::Test::UploadedFile:0x000000069ce1f8 @content_type="image/png", @original_filename="test.png", @tempfile=#<Tempfile:/tmp/test.png20130420-9529-1xuka4v-1>>, "status"=>"approved", "in_use"=>false}, "controller"=>"member/photos", "action"=>"create"} 

Wie kann ich das Bildattribut für die Zuordnung erlauben? Ich habe es versucht;

params.require(:photo).permit(:image) 

aber es funktioniert nicht und sagt Validation failed: Image can't be blank.

Wenn ich alle Parameter mit params.require(:photo).permit! erlaube, funktioniert es gut.

+1

Haben Sie eine Lösung gefunden? auch mit diesem stecken –

Antwort

1

Von http://api.rubyonrails.org/classes/ActionController/Parameters.html

PERMITTED_SCALAR_TYPES = [String, Symbol, NilClass, Numerisch, Trueclass, False, Datum, Uhrzeit, StringIO, IO, ActionDispatch :: Http :: UploadedFile, Rack-:: Test :: UploadedFile]

so müssen Sie es einfach als eine skalare Typ ermöglichen:

params.require(:photo).permit(:image) 

Nur getestet auf Rails 4.1.1

+0

Scheint wie das Problem mit Rails 4.1.1 behoben. –

+0

Das wurde vor einem Jahr in '4.0.0' behoben. Https://github.com/rails/rails/pull/9357 – freemanoid

+0

Ich habe das Problem vor kurzem überprüft, also bin ich mir nicht sicher, wann es behoben wurde. Ich denke, als ich mit diesem Problem konfrontiert wurde, war Rails 4.0 noch neu. –