在hstore属性上使用update_columns

时间:2015-04-27 13:45:47

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

rails 4中的update_columns属性是否等同hstore

我的模特是:

class Image < ActiveRecord::Base
  store_accessor :additions, :small, :medium, :big, :image_version
end

假设我想要更新small 我试过了:

@image = Image.first
@image.update_columns(small: 'my_small_image')

但我收到了,当然:

PG::UndefinedColumn: ERROR:  column "small" of relation "contents" does not exist
LINE 1: UPDATE "images" SET "small" = 'my_small_image' WHERE "imag...
                              ^
: UPDATE "images" SET "small" = 'my_small_image' WHERE "images"."id" = 1

有一种简单的方法吗?

编辑:我无法使用update_attributes,因为我需要保存传递的参数。

update_attributes调用save,我不希望这样,因为它会保存所有其他已更改的属性,而不仅仅是传递的属性。

示例:

@image = Image.first
@image.big = 'fjdiosjfoa'
@image.update_attributes(small: 'my_small_image')

大小都得救了。

相反,使用update_columns,只会保存一小部分。如何使用hstore进行操作?

2 个答案:

答案 0 :(得分:2)

如果要保存,请使用update_attributes(small: 'my_small_image')

如果您不想保存,请使用assign_attributes(small: 'my_small_image')

答案 1 :(得分:1)

使用update_column但传入hstore属性和哈希。要防止任何现有的hstore值被吹走,您需要合并现有值:

@image.update_column(:additions, @image.additions.merge({ 'small' => 'my_small_image' }) )