Ruby on rails 如何使用Mongoid::Slug缓存遗留数据
我正在使用Mongoid::Slug 我正在尝试更新一组数据,其中一部分是在使用os Mongoid::Slug之前创建的。所以我有一堆对象,它们的_slug=[]和slug.nil?。我想在rake任务中更新这些,但不知何故,我失败得很惨 所有对象都从“title”属性派生其slugRuby on rails 如何使用Mongoid::Slug缓存遗留数据,ruby-on-rails,mongoid,mongoid-slug,Ruby On Rails,Mongoid,Mongoid Slug,我正在使用Mongoid::Slug 我正在尝试更新一组数据,其中一部分是在使用os Mongoid::Slug之前创建的。所以我有一堆对象,它们的_slug=[]和slug.nil?。我想在rake任务中更新这些,但不知何故,我失败得很惨 所有对象都从“title”属性派生其slug slug :title, history: true rake任务: class SlugGenerator def run all_objects = get_array_of_all_obje
slug :title, history: true
rake任务:
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
Portfolio.each do |portfolio|
portfolio.build_slug
portfolio.save
end
class-SlugGenerator
def运行
所有对象=获取所有对象的数组
objects_without_slug=所有_对象。选择{| obj | obj.slug.blank?}
pp“#{objects_不带_Slug.count}不带Slug。”
对象_不带_slug。每个对象都有| obj|
p“项#{obj.title}没有slug”
p obj.save
结束
结束
def获取所有对象的数组
所有_对象=[]
all_公文包=公文包.all
所有对象我都遇到了相同的问题,并通过添加
set_callback :update, :before, :build_slug
set_callback :save, :before, :build_slug
给我的模特
在那之后,我只是在rails控制台中运行了我的所有实体,将“updated_at”字段更新为DateTime。现在保存它,瞧!slug已经创建。假设您有model公文包
并且您需要为所有遗留对象添加slug,那么您只需要在console中运行它,或者您可以执行新的rake任务:
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
Portfolio.each do |portfolio|
portfolio.build_slug
portfolio.save
end
在没有slug的对象上调用“buildæu slug()”方法。@AndreasSæbjørnsen,这是不可行的。到目前为止,解决这个问题的唯一方法是克隆对象,删除原始对象并重新连接克隆。我就这样丢了身份证,所以我对此不满意,但这是我能想到的最好的办法。这不必要,而且有点不幸。您是否验证了文档是否正确保存?您是否有一些验证正在通过错误停止保存?它们进行验证,在pry中,我可以保存它们。看来是这样。一旦我重新加载数据,就不会保存任何内容。这真的很奇怪,甚至可能是一个mongoid或mongodb错误…您在mongodb控制台中看到任何错误吗?我建议在rails conmmandline上的单个文档上设置slug并保存它。保存后运行有效吗?方法,以确保模型正确保存,然后检查mongodb日志。