2016-06-29 14 views
1

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!

+0

versuchen Sie Array in 'Supplements_ids' zu speichern? – Aamir

+0

Ja, ist es möglich, ["2", "3"] zu haben? –

+0

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

Antwort

0

ändern Spaltentyp in der Datenbank unter Verwendung von Migration

class ChangeColumnSupplementalsIdsInOrder < ActiveRecord::Migration 
    def up 
    change_column : supplementals_ids, :text 
    end 

    def down 
    change_column : supplementals_ids, :integer 
    end 
end 

Dann Modell folgenden Code hinzufügen

class Order < ActiveRecord::Base 
    serialize : supplementals_ids, Array 
end 

Dann supplementals_ids verwenden Array in Controller

order = Order.new # supplementals_ids: [] 
order.stuff << params[:order][:supplementals_ids] 

Hinweis zu speichern: Array von Werte können nicht ingespeichert werdenSpalte supplementals_ids

Verwandte Themen