首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Mongoid::Slug对遗留数据进行插件化

如何使用Mongoid::Slug对遗留数据进行插件化
EN

Stack Overflow用户
提问于 2014-09-10 05:07:43
回答 2查看 192关注 0票数 2

我使用的是Mongoid::Slug https://github.com/digitalplaywright/mongoid-slug

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

所有对象都从“title”属性派生其slug。

代码语言:javascript
复制
slug :title, history: true

rake任务:

代码语言:javascript
复制
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。尽管如此,这些对象仍然可以继续,而不会有段塞。即使我在保存之前更改标题,我也不会得到不同的结果。

我错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-03-26 03:58:56

我得到了同样的问题,并通过添加

代码语言:javascript
复制
set_callback :update, :before, :build_slug
set_callback :save,   :before, :build_slug

我的模型。

在那之后,我只是在rails控制台中运行了我所有的实体,将'updated_at‘字段更新为DateTime.now保存它,瞧!弹头已被创建。

票数 1
EN

Stack Overflow用户

发布于 2015-09-07 21:02:33

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

代码语言:javascript
复制
Portfolio.each do |portfolio|
   portfolio.build_slug
   portfolio.save
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25753601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档