我使用的是Mongoid::Slug https://github.com/digitalplaywright/mongoid-slug。
我正在尝试更新一组数据,其中一部分是在使用os Mongoid::Slug之前创建的。所以我有一堆_slugs = []和slug.nil?的对象。我想在rake任务中更新这些,但不知何故我失败得很糟糕。
所有对象都从“title”属性派生其slug。
slug :title, history: truerake任务:
class SlugGenerator
def run
all_objects = get_array_of_all_objects
objects_without_slugs = all_objects.select { |obj| obj.slug.blank? }
pp "#{objects_without_slugs.count} without Slug."
objects_without_slugs.each do |obj|
p "item #{obj.title} has no slug"
p obj.save
end
end
def get_array_of_all_objects
all_objects = []
all_portfolios = Portfolio.all
all_objects << all_portfolios
all_items = all_portfolios.map { |p| p.portfolio_items }.flatten #array embedded in portfolio
all_objects << all_items
all_images = all_items.map { |item| item.images }.flatten #array embedded in pf_item
all_objects << all_images
all_objects.flatten
end
end Save返回true。尽管如此,这些对象仍然可以继续,而不会有段塞。即使我在保存之前更改标题,我也不会得到不同的结果。
我错过了什么?
发布于 2015-03-26 03:58:56
我得到了同样的问题,并通过添加
set_callback :update, :before, :build_slug
set_callback :save, :before, :build_slug我的模型。
在那之后,我只是在rails控制台中运行了我所有的实体,将'updated_at‘字段更新为DateTime.now保存它,瞧!弹头已被创建。
发布于 2015-09-07 21:02:33
假设你有模型Portfolio,并且你需要为所有遗留对象添加slug,那么你只需要在控制台中运行它,或者你可以执行新的rake任务:
Portfolio.each do |portfolio|
portfolio.build_slug
portfolio.save
endhttps://stackoverflow.com/questions/25753601
复制相似问题