Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Rails中,如何为所有记录向数组类型属性添加元素?_Arrays_Postgresql_Ruby On Rails 4_Rails Activerecord - Fatal编程技术网

Arrays 在Rails中,如何为所有记录向数组类型属性添加元素?

Arrays 在Rails中,如何为所有记录向数组类型属性添加元素?,arrays,postgresql,ruby-on-rails-4,rails-activerecord,Arrays,Postgresql,Ruby On Rails 4,Rails Activerecord,DB是PostgreSQL。如何将所有记录的值附加到具有数组数据类型的列 例如: # migration_file.rb def change add_column :users, :tags, :string, array: true, default: [] end 如何将相同的值附加到所有用户记录的标记属性?我想做一些类似的事情: User.update_all(tags << "some_tag") User.update\u all(tags您可以将SQL代码段传

DB是PostgreSQL。如何将所有记录的值附加到具有数组数据类型的列

例如:

# migration_file.rb

def change
  add_column :users, :tags, :string, array: true, default: []
end
如何将相同的值附加到所有用户记录的
标记
属性?我想做一些类似的事情:

User.update_all(tags << "some_tag")

User.update\u all(tags您可以将SQL代码段传递给,以便使用所有常用代码。例如:

User.update_all(['tags = tags || ?::text', 'some_tag'])
或者没有
|
歧义(以及相应的强制转换):


请注意,在这种情况下,您将传递
update\u all
一个数组,您需要这样做,以使AR相信您希望
'some\u tag'
填充占位符,而不是WHERE子句。

尝试使用此
User.update\u all(标记这很有意义,不幸的是我遇到了
ActiveRecord::StatementInvalid:PG::InvalidTextRepresentation:ERROR:数组值必须以“{”开头或者维度信息。
错误可能与手头的问题无关;我会继续挖掘。这是哪个版本的PostgreSQL?你能从
psql
更新用户设置标签=标签| | |“一些标签”
吗?不,我不能在
psql
,即使从9.2.2升级到9.3.4。为了在我的迁移文件中发挥作用,我改变了de>default:[]
default:'{}'
但也没有运气。好的,下面是看起来有效的方法:
update users set tags=tags | |{some_value}“
。我会再修改一下,但这似乎是正确的语法。数组有两种形式:
array |
元素和
array | | array
。我猜PostgreSQL正在选择
array | | array
形式,并试图将字符串解释为字符串格式的数组(即,它期望
{some_value}
array['some_value']
相同。如果您添加显式强制转换(如我更新的答案中所示),则它应该选择正确版本的
|
运算符。或者,您可以使用
array_append
并避免歧义。
User.update_all(['tags = array_append(tags, ?)', 'some_tag'])
User.update_all(['tags = tags || array[?]', 'some_tag'])