Rails,通过表单传递数组

时间:2016-06-29 18:53:44

标签: ruby-on-rails forms

我正在尝试使用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

感谢您的任何建议!

1 个答案:

答案 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_idsorder = Order.new # supplementals_ids: [] order.stuff << params[:order][:supplementals_ids]