2

私は Mongoid::Slug https://github.com/digitalplaywright/mongoid-slugを使用しています。

os Mongoid::Slug を使用する前に部分的に作成された一連のデータを更新しようとしています。だから私は _slugs = [] と slug.nil? を持つオブジェクトの束を持っています. これらをレーキタスクで更新したいのですが、どういうわけか惨めに失敗しています。

すべてのオブジェクトは、'title' 属性からスラッグを取得します。

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  

保存は true を返します。それでも、これらのオブジェクトはナメクジなしで続行します。保存する前にタイトルを変更しても、結果は変わりません。

何が足りないの

4

2 に答える 2

0

モデルPortfolioがあり、すべてのレガシー オブジェクトにスラッグを追加する必要があるとします。これをコンソールで実行するか、新しい rake タスクに進むことができます。

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