0

我正在使用 rails JSON gem 快速为我的数据库添加 JSON 数据。在我的seeds.rb 文件中,我有这个方法

  businessPath = "#{Rails.root}/public/business2.json"
  businesses = JSON.parse(File.read(businessPath))
  businesses.each do |business|
  Business.create!(business)    
end

然而,我得到的 JSON 数据是一些额外的属性,我不希望这个模型具有业务。当我尝试按原样播种时,出现此错误。

Can't mass-assign protected attributes: schools, categories, neighborhoods, longitude, latitude, type

这些是我在 Rails 中的业务模型中没有的属性,它们是 JSON 文件中每个业务的属性。有没有办法在运行 Business.create 之前忽略这些属性?

谢谢!

4

1 回答 1

4

试试ActiveSupport 提供的Hash#sliceHash#except。你可以运行:

businessPath = "#{Rails.root}/public/business2.json"
businesses = JSON.parse(File.read(businessPath))

然后你可以将额外的属性列入黑名单

businesses.each do |business|
  Business.create!(business.except(:schools, :categories, :neighborhoods, :longitude, :latitude, :type))
end

或仅将您要保留的属性列入白名单

businesses.each do |business|
  Business.create!(business.slice(:name, :owner, :etc))
end
于 2013-04-18T02:46:00.377 回答