在Rails 4 rake任务中更新Mongoid文档

时间:2014-06-17 17:38:14

标签: ruby-on-rails ruby ruby-on-rails-4 mongoid rake

在我升级到Rails 4之前,这段代码似乎工作正常:

desc "import the books"
task books: :environment do
  records = JSON.parse(File.read('app/data/books.json'))
  records.each do |record|
    book = Book.find_or_create_by(:link => record["link"])
    record.each do |k, v|
      if book.send(k).blank?
        book.send(k+"=", v)
      else
        unless v.blank?
          book.send(k+"=", v)
        end
      end
    end
    book.save
  end
end

但是现在当我尝试导入它时,所有值(除了:link,在find_or_create_by方法中指定)都是nil。

#<Course _id: 53a07c1f4d61630d34980200, name: nil, language: nil, image: nil, link: "example.com", affiliate_link: nil>

这是否是由Rails 4中实施的某种针对质量分配的保护引起的?我没有意识到这可能会影响Rake任务。我怎样才能最好地解决这个问题。谢谢你的快速帮助!

1 个答案:

答案 0 :(得分:0)

find_or_create_by由于某种原因不起作用,所以我实施了以下解决方法:

book = Book.where(:link => record["link"]).first
if book.blank?
  book = Book.create!
end

这似乎有完全相同的效果,但实际上可以在Rails 4 / Mongoid 4.0.0.beta1

中使用