Ich versuche, ein Array-Attribut in Schienen zu schieben bilden mit check_box_tag, die wie folgt aussieht:Rails, übergeben Sie ein Array über ein Formular
= check_box_tag 'order[supplementals_ids][]', supplemental.id
Alles in Ordnung geht, wenn das Formular absenden. Ich untersuche die gedrückten Parameter mit einem Debugger, kurz bevor ich einen Auftrag erstelle. Die Ausgabe von params [: order] ist
{"supplementals_ids"=>["2", "3"], "meal_id"=>"4"}
was gut aussieht. Aber nach dem Erstellen der Bestellung, bekomme ich folgende
supplementals_ids: nil
Jede Idee, wo ist das Problem? Die erlaubten params in der Bestellungen-Controller wie folgt aussehen:
params.require(:order).permit(:meal_id, supplementals_ids: [])
Was ich vermute, das Problem ist, dass in meinem Schema, der erwartete Wert von supplementals_ids eine ganze Zahl.
create_table "orders", force: :cascade do |t|
t.integer "meal_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "supplementals_ids"
end
Wenn jedoch das Attribut in meinem Modell Serialisierung, bekomme ich
Attribut sollte ein Array sein, aber war ein Fixnum. - 0
Vielen Dank für Anregungen!
versuchen Sie Array in 'Supplements_ids' zu speichern? – Aamir
Ja, ist es möglich, ["2", "3"] zu haben? –
das ist wirklich schlecht. Der beste Weg ist eine Assoziation 'has_many: Supplements' in' Order', so dass Sie die Supplements speichern und mit 'order.supplements' bestellen können. (Sie können ein Join-Modell zwischen Bestellung und Zuschlag verwenden). – dpedoneze