2016-06-29 3 views
1

Я пытаюсь вытолкнуть атрибут массива в рельсах формируют с помощью check_box_tag который выглядит следующим образом:Rails, передать массив через форму

= check_box_tag 'order[supplementals_ids][]', supplemental.id 

Все идет нормально при отправке формы. Я рассматриваю нажатые параметры с помощью отладчика непосредственно перед созданием заказа. Выход параметров [: порядок] равен

{"supplementals_ids"=>["2", "3"], "meal_id"=>"4"} 

, который выглядит нормально. Однако после создания заказа я получаю следующее:

supplementals_ids: nil 

Любая идея, в чем проблема? Разрешенный PARAMS в контроллере заказов выглядеть следующим образом:

params.require(:order).permit(:meal_id, supplementals_ids: []) 

То, что я подозреваю, что проблема заключается в том, что в моей схеме, ожидаемое значение supplementals_ids является целым числом.

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 

Однако, когда сериализации атрибут в моей модели, я получаю

Атрибут должен был быть массив, но был Fixnum. - 0

Благодарим за любые предложения!

+0

Вы пытаетесь сохранить массив в 'Additionalals_ids'? – Aamir

+0

Да, возможно ли в нем ["2", "3"]? –

+0

это действительно плохо. Лучший способ - это ассоциация 'has_many: addplements' в' Order', поэтому вы можете сохранить дополнения и получить «order.supplements». (вы можете использовать модель соединения между порядком и дополнением). – dpedoneze

ответ

0

Изменить тип столбца в базе данных с помощью миграции

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

    def down 
    change_column : supplementals_ids, :integer 
    end 
end 

Затем добавьте следующий код в модели

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

Затем используйте supplementals_ids, чтобы сохранить массив в контроллере

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

Примечание: Массив значения не могут быть сохранены в integer столбец supplementals_ids

Смежные вопросы