我遇到了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
。
答案 0 :(得分:1)
如果有人遇到这样的麻烦,我设法解决了这个问题。这就像Ruby上的童话故事之一,父母告诉他们的孩子故事的寓意:'孩子们不要忘记尽可能使用括号,只是为了确保你的代码是正确的'。
问题是你用括号注意到的,我想它以某种方式解释了这个方法而不是需要它。它的工作原理如下:
album.roles.merge!(Hash[users.pluck(:id).zip(params[:album][:roles])])