Ruby on rails 如何更新序列化列
有一个带有序列化列的大模型Ruby on rails 如何更新序列化列,ruby-on-rails,ruby,serialization,Ruby On Rails,Ruby,Serialization,有一个带有序列化列的大模型 serialize :places 这里有好几个地方 City.all.first.places => "[school, libary, store, flowers, bank]" 我想删除所有鲜花,并将“商店”重命名为“仓库” 如果有“商店”,也应该有“教堂” 我创建了以下任务,但是如果我检查一些条目,数据是相同的 City.all.each do |city| next unless city.places.present? places =
serialize :places
这里有好几个地方
City.all.first.places
=> "[school, libary, store, flowers, bank]"
我想删除所有鲜花,并将“商店”重命名为“仓库”如果有“商店”,也应该有“教堂” 我创建了以下任务,但是如果我检查一些条目,数据是相同的
City.all.each do |city|
next unless city.places.present?
places = city.places[1..-2].split(', ')
places.delete('flowers')
if places.include?('store')
places.delete('store')
places.push('warehouse','church')
end
city.places = places
city.save
end
听起来您应该将位置设置为它自己的表,然后设置一个连接表将它们连接到城市,如:
class City < ApplicationRecord
has_many :city_places
has_many :places, through: :city_places
end
class CityPlace < ApplicationRecord
belongs_to :city
belongs_to :place
end
class Places < ApplicationRecord
has_many :city_places
has_many :cities, through: :city_places
end
class城市
这样,城市可以有很多地方,如果你想重命名一个地方,你可以在数据库中更改它的名称。以下是。尝试将其分解为一个最小的问题<代码>city.places=[“学校”、“图书馆”、“银行”、“仓库”、“教堂”];city.save您序列化的列已经是一个数组,因此不需要使用
拆分
。在控制台中尝试此操作:City.all.first.places.class
,您将获得=>Array
(顺便说一句,您可以跳过all
,直接转到first
)。和City.places[1..-2]。拆分(“,”)可能并不是您想要的。更好的方法是去掉字符串中的所有空格(如果它们只能在逗号后出现)city.places.gsub(/\s+/,“”).split(‘,’)或仅在类似逗号的city.places.gsub(‘,’,’,’).split(‘,’)@TomLord消息为空,base中为对象。让我们弄清楚。。。您的问题的一个最小且可重复的示例是:put city.places=>;city.places=;city.save=>true;city.places=>
???!!!!