如何使用ruby在postgres中对hstore列执行复杂更新?

时间:2014-03-25 16:55:38

标签: ruby postgresql activerecord ruby-on-rails-4 hstore

我在ruby中有这个sql查询来更新postgres中的hstore列

query = %Q{UPDATE accounts SET favorites =
    hstore(ARRAY['favorite_book', user.book, 'favorite_movie', user.movie])
    FROM (VALUES #{data} ) AS user(id_str, favorite_book, favorite_movie)
    WHERE accounts.original_id_str = user.id_str;}

其中data是一个看起来像这样的字符串

data = "('3082633', 'FavoriteBook1', 'FavoriteMovie1'),('1768517', 'FavoriteBook2', 'FavoriteMovie2'),('8245997', 'FavoriteBook3', 'FavoriteMovie3')"

现在我通过调用

更新数据库表
Account.connection.execute(query)

但有没有办法将尽可能多的查询转换为ruby而不是sql?例如,像

add_to_hstore = %(favorites = hstore(?, ?))
Account.update_all([add_to_hstore, "favorite_book", "LOTR"])

而是使用'数据'中的值。变量

1 个答案:

答案 0 :(得分:0)

像这样的hstore有宝石:https://github.com/diogob/activerecord-postgres-hstore

或者您通过创建自己的帐户对象来使用简单更新: http://apidock.com/rails/ActiveRecord/Relation/new