2

我正在使用 Mongoid::Slug https://github.com/digitalplaywright/mongoid-slug

我正在尝试更新一组数据,这些数据部分是在使用 os Mongoid::Slug 之前创建的。所以我有一堆带有 _slugs = [] 和 slug.nil? 的对象。我想在 rake 任务中更新这些,但不知何故我失败了。

所有对象都从 'title' 属性派生它们的 slug。

slug :title, history: true

耙子任务:

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  

保存返回真。尽管如此,这些对象仍然没有蛞蝓。即使我在保存之前更改标题,我也不会得到不同的结果。

我错过了什么

4

2 回答 2

1

我遇到了同样的问题并通过添加解决了它

set_callback :update, :before, :build_slug
set_callback :save,   :before, :build_slug

到我的模型。

之后,我只是在 rails 控制台中运行了我的所有实体,将“updated_at”字段更新为 DateTime。现在保存它,瞧!蛞蝓已被创建。

于 2015-03-25T19:58:56.380 回答
0

假设您有模型Portfolio并且需要为所有遗留对象添加 slug,那么您只需要在控制台中运行它,或者您可以执行新的 rake 任务:

Portfolio.each do |portfolio|
   portfolio.build_slug
   portfolio.save
end
于 2015-09-07T13:02:32.547 回答