有一个带序列化列的大型模型
serialize :places
存储了几个地方。
City.all.first.places
=> "[school, libary, store, flowers, bank]"
我想删除所有鲜花,并将'store'重命名为'warehouse' 如果有“商店”,那么还应该有一个“教堂”
我创建了以下任务,但是如果我检查一些条目,数据是相同的。
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
答案 0 :(得分:0)
听起来你应该有自己的位置,然后有一个连接表将它们连接到以下城市:
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
这样城市可以有很多地方,如果你想重命名一个地方,你可以在数据库中更改它的名字。以下是the docs for this kind of relationship in rails。