在我升级到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任务。我怎样才能最好地解决这个问题。谢谢你的快速帮助!
答案 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
中使用