5

Ich portiere eine Anwendung, die Carrierwave zu Rails 4 verwendet, aber ich habe Probleme mit starken Params. Ich habe ein Modell mitDatei-Upload mit Rails 4, starke Parameter und Carrierwave

accepts_nested_attributes_for :photos 

Hier ist, wie hochgeladene Bilder übergeben werden:

{ 
    # ... 
    "model"=> 
    { 
     # ... 
     "photos_attributes"=> 
     { 
      "1362752177921"=> 
      { 
       "image"=>"test.jpg", 
      } 
     } 
    } 
} 

aber ich nicht scheinen, um herauszufinden, wie kann Parameter schreiben, die photos_attributes akzeptieren.

Ich habe .permit(photos_attributes: []) versucht, aber es einfach überspringt sie, wenn ich permit!, uuid, die vor dem Speichern erstellt wird, nicht in SQL angezeigt wird, und dies ist die zweite Ausgabe:

photos.uuid may not be NULL: INSERT INTO "photos" ("created_at", "model_id", "image", "title", "updated_at") VALUES (?, ?, ?, ?, ?) 

Dokumentation für starke Parameter ist fehlt hier und ich bin mir nicht einmal sicher, wie es weitergeht.

aktualisieren Das funktionierte mit den verschachtelten Attributen:

params.permit(..., :photos_attributes => ['id', 'title', 'image', '_destroy']) 

Aber sieht aus wie entweder Carrierwave oder Nested-Formular sollte für Rails 4 zuerst aktualisiert werden. Es wird einfach versucht, ständig ein leeres Bild zu speichern. Gleicher Code (ohne strong_params) arbeitet in Rails 3

Antwort

1

Diese mit den verschachtelten Attributen gearbeitet:

params.permit(..., :photos_attributes => ['id', 'title', 'image', '_destroy']) 

Aber sieht aus wie entweder Carrierwave oder Nested-Formular sollte für Rails 4 zuerst aktualisiert werden. Es versucht einfach immer ein leeres Bild zu speichern, das ich mit :reject_if gelöscht habe, aber es funktioniert immer noch nicht 100.