Rails seed JSON игнорирует некоторые атрибуты

Я использую гем rails JSON, чтобы быстро заполнить мою базу данных данными JSON. В моем файле seed.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?

Спасибо!


person Daniel Langer    schedule 18.04.2013    source источник


Ответы (1)


Попробуйте Hash#slice или Hash#except, который предоставляет ActiveSupport. Вы можете запустить:

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
person Benjamin Manns    schedule 18.04.2013