我试图在我的表users
的一列中保存一个字符串数组。我在我的迁移文件add_column :users, :choices, :string
中有这一行。这不起作用,因为我试图存储一个数组而不仅仅是一个字符串,我的终端显示Unpermitted parameter: :choices
。我如何存储一个数组?(显然add_column :users, :choices, :array
不起作用)
我试图在我的表users
的一列中保存一个字符串数组。我在我的迁移文件add_column :users, :choices, :string
中有这一行。这不起作用,因为我试图存储一个数组而不仅仅是一个字符串,我的终端显示Unpermitted parameter: :choices
。我如何存储一个数组?(显然add_column :users, :choices, :array
不起作用)
2条答案
按热度按时间vxqlmq5t1#
数据库列实际上与错误无关,您可以通过定义类型并使用
array: true
选项来定义数组列,因为大多数数据库中数组都是类型化的,这与Ruby不同:然而,这通常是一个坏主意,因为您将多个值放在一列中,并放弃了离散表在规范化、关联、外键等方面的所有优势,从而违反了第一范式(1 NF)。这是每个人在发现数组列时都会想到的想法-但实际上并不是一个好的设计决策。
当传递具有不允许的键的ActionController::Parameters示例时,将引发
Unpermitted parameter: :choices
。它与基础数据库列或属性完全无关。您可以通过传递一个带有空数组的散列键来将数组列列入白名单:
这允许数组包含任何类型的允许标量值。
ct2axkht2#
在迁移过程中应该就像这样简单
那么您可能希望防止写入非数组类型。