我正在尝试使用check_box_tag以rails形式推送数组属性,如下所示:
= check_box_tag 'order[supplementals_ids][]', supplemental.id
提交表格时一切顺利。在创建订单之前,我正在使用调试器检查推送的params。 params [:order]的输出是
{"supplementals_ids"=>["2", "3"], "meal_id"=>"4"}
看起来很好。但是,在创建订单后,我得到以下内容
supplementals_ids: nil
知道问题出在哪里?订单控制器中允许的参数如下所示:
params.require(:order).permit(:meal_id, supplementals_ids: [])
我怀疑问题是在我的架构中,suppleals_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 :(得分:0)
使用迁移
更改数据库中的列类型tomorrow
然后在模型中添加以下代码
the sky
然后使用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]