我正在开发Ruby on Rails应用程序,并且此应用程序有一个名为'User'的模型。这个模型有一个名为'remark'的数据库列(在我的Postgres数据库中)。这个'评论'字段是HSTORE类型。它存储一个包含有关此用户的额外信息的散列。通过Rails Activerecord在Postgres HSTORE中保存第一个键/值对
我正在使用一种方法,使用'info'键将这个参数(params [:info])的值保存到这个'remark'字段中。此代码有效。
def save_info_for_user(info)
@user.remark = { :info => info }
@user.save
end
而这个代码不起作用数据库字段时为空。因此,只有当它至少保留一个键/值对时,才有可能像这样保存一个新值。
def save_info_for_user(info)
@user.remark['info'] = info
@user.save
end
它提供了以下错误:
> undefined method `[]=' for nil:NilClass
而且此代码的工作既不是:
def save_info_for_user(info)
@user.remark[:info] = info
@user.save
end
它给出了同样的错误
> undefined method `[]=' for nil:NilClass
而且在一些测试我发现'备注[:info]'保存与'不同的值''['info']'
非常令我困惑。
我的问题: 为什么
@user.remark[:info] = info
给出了错误。它应该知道数据库字段'remark'是一个散列,因为它的类型被定义为HSTORE?
希望有人可以解释这里发生了什么,以及如何使这种方法futureproof。
谢谢塞尔吉奥!听起来合乎逻辑 – MDekker