使用Postgres数据库,在staff_ids
表中添加了一个文本字段branches
:
add_column :branches, :staff_ids, :text
在控制器中将此字段添加到branch_params列表:
:staff_ids => []
数据已保存在此列中,如["","32","52"]
。在查询这个字段时,我收到一个错误,说staff_ids应该是一个数组
Branch.where("? = ANY(staff_ids)", '20')
ActiveRecord::StatementInvalid: PG::WrongObjectType: ERROR: op ANY/ALL (array) requires array on right side
实际上,我在添加array: true
字段时忘记在迁移中添加staff_ids
选项。
现在添加了另一个迁移以更改此列,并尝试添加array: true
选项:
change_column :branches, :staff_ids, :text, array: true
但迁移失败并出现错误:
PG::DatatypeMismatch: ERROR: column "staff_ids" cannot be cast automatically to type text[]
现在我要更新where子句,以便根据staff_ids过滤分支而不添加数组:true或修复上面提到的迁移。
有任何建议/想法吗?
答案 0 :(得分:0)
您可以在迁移中添加以下内容,
def up
change_column :branches, :staff_ids, :text, array: true, default: [], using: "(string_to_array(staff_ids, ','))"
end
def down
change_column :branches, :staff_ids, :text, array: false, default: nil, using: "(array_to_string(staff_ids, ','))"
end
如果不需要更改数组,定义向上和向下方法将有助于在任何时候撤消迁移。