Hstore不会在rails中更新其值

时间:2015-07-16 06:58:29

标签: ruby-on-rails postgresql hstore

我遇到了postgres hstore的问题。我发现在Rails 4.2之前。你需要使用这段代码来保存hstore:

var_will_change!
var[:foo] = 'boo'
var.save!

这个问题在这里https://github.com/rails/rails/issues/6127

在新的rails中,hstore没有这样的问题。即使您查看导轨指南http://edgeguides.rubyonrails.org/active_record_postgresql.html#hstore。只有var.save!。我不明白为什么它不适用于我的代码。我正在使用rails 4.2.1。这是我的代码:

def update
    album = Album.find(params[:id])

    users = User.where(email: params[:album][:emails])
    album.members.merge!(Hash[users.pluck(:id).zip params[:album][:roles]])

    album.save!

    render json: Hash[users.pluck(:name).zip params[:album][:roles]]
  end

在此代码中album.members是需要修复的hstore。

哦,也许这个代码可以更简单的方式升级。如果你有这样的建议,我很乐意听到。
谢谢回答。

修改 发现更具体的错误,当相册尝试保存时,我收到此错误8991 segmentation fault (core dumped) rails s

1 个答案:

答案 0 :(得分:1)

如果有人遇到这样的麻烦,我设法解决了这个问题。这就像Ruby上的童话故事之一,父母告诉他们的孩子故事的寓意:'孩子们不要忘记尽可能使用括号,只是为了确保你的代码是正确的'。

问题是你用括号注意到的,我想它以某种方式解释了这个方法而不是需要它。它的工作原理如下:

album.roles.merge!(Hash[users.pluck(:id).zip(params[:album][:roles])])