Helo everyone,
当我运行任务时,我尝试访问带有轨道和 mongoid 的 BSON ID,但我有以下错误消息:
Mongoid::Errors::InvalidValue:
message:
Value of type BSON::ObjectId cannot be written to a field of type Array
summary:
Tried to set a value of type BSON::ObjectId to a field of type Array
resolution:
Verify if the value to be set correspond to field definition
我不明白为什么,因为我只是输入一个id,这是代码:
任务:
namespace :geocodeschool do
desc "Show premium school near non-premium school and update them"
task :schgc => :environment do
@schools = School.all
def premium_school_aside(school)
radius = 50
@schools_a = School.near(school.coordinates.reverse, radius, units: :km)
@schools_premium = @schools_a.premium_school.limit(3)
end
@schools.each do |school|
premium_school_aside(school)
puts "// -------------- //"
puts "AUTO-ÉCOLE : #{school.title}"
puts "// -------------- //"
puts "les auto-écoles premiums près de #{school.title} : #{@schools_premium.count}"
puts "-------"
@schools_premium.each do |sa|
puts sa.id
school.update(school_premium_asides: sa.id)
end
puts "-------"
end
end
end
和模型中的字段:
field :school_premium_asides, type: Array
有人可以解释我为什么以及如何解决这个问题吗?
你的模型中有这个:
field :school_premium_asides, type: Array
所以Mongoid希望在您分配给school_premium_asides
时看到数组。但是在你的耙子任务中,你有:
school.update(school_premium_asides: sa.id)
据推测sa.id
是一个单一的BSON::ObjectId
值。这意味着您正在尝试将单个BSON::ObjectId
写入 Array 类型的字段,这就是您的:
BSON::ObjectId 类型的值不能写入数组类型的字段
错误来自。
我不确定您的代码试图做什么,但我认为您想将@schools_premium
的所有id
分配给 school
中的school_premium_asides
字段。如果是这样,那么你想要替换它:
@schools_premium.each do |sa|
puts sa.id
school.update(school_premium_asides: sa.id)
end
跟:
school.update(school_premium_asides: @schools_premium.map(&:id))