如何更新序列化列

时间:2017-06-29 12:44:36

标签: ruby-on-rails ruby serialization

有一个带序列化列的大型模型

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

1 个答案:

答案 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