【发布时间】:2020-03-11 11:39:05
【问题描述】:
给定一个person ActiveRecord 实例:person.phones #=> {home: '00123', office: '+1-45'}
是否有更符合 Ruby/Rails 习惯的方式来执行以下操作:
person_phones = person.phones
person_phones[:home] = person_phones[:home].sub('001', '+1')
person.update_column :phones, person_phones
示例数据无关紧要。
我只想sub 一个特定的哈希键值和要保存在数据库中的新哈希。我想知道是否有办法做到这一点,只需调用一次person.phones,而不是多次
【问题讨论】:
-
惯用语是什么意思?你不能
person.update_column(:phones, person.phones[:home].sub('001', '+1'))吗? -
嗨塞巴斯蒂安!在您的示例中,
sub将返回一个字符串,并在update_column时替换整个哈希。所以你不能这样做:( -
对了!真的没看到。您正在使用什么 RDBMS 和版本(如果有)?手机是什么数据类型?
-
MYSQL。我知道我不应该将哈希值保存到数据库中,但这是一个已经植入的遗留决定 :)
-
person.phones.class #=> ActiveSupport::HashWithIndifferentAccess,如果对你有帮助的话。
标签: ruby-on-rails ruby