Arrays 在Rails中,如何为所有记录向数组类型属性添加元素?
DB是PostgreSQL。如何将所有记录的值附加到具有数组数据类型的列 例如: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代码段传
# 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'])