我有一张研究所表和一张地点表。我从电子表格中提取了数据,目前有以下信息:
Institute
id, name, ukprn
Location
id, name, ukprn, lat, long, institute
ukprn
是通过政府提供的唯一身份证明,但未来某些机构可能没有这个,所以我不想专门用它作为参考。我认为我需要做的是使Location.institute属性包含Institute.id,其中Institute.ukprn和Location.ukprn匹配,但我不确定这将如何工作并将其保存到代码中。
我试过了:
Location.each do |location|
if location.ukprn == Institute.ukprn then
put Institute.id => Location.institute
end
end
这会出现一个未定义的方法'each'错误。我显然做错了什么,但不知道如何解决这个问题。
答案 0 :(得分:1)
您将获得undefined method each error
,因为作为模型类的位置没有每种方法。您的代码中还有其他错误。
您必须按以下方式执行此操作,
Institute.find_each do |institute|
Location.where(ukprn: institute.ukprn).update_all(institute_id: institute.id)
end
在您检查所有位置ukprn
的每个机构的上述代码中,每个匹配位置的institute_id将更新为机构ID。
答案 1 :(得分:0)
在课堂上调用每个方法都没有意义。首先获取所有地点和机构,并执行以下操作:
@locations = Location.all
@institutes = Institute.all
@locations.each do |location|
@institutes.each do |institute|
if location.ukprn == institute.ukprn
institute.id = location.institute
institute.save!
end
end
end
我想可能有更好的方法来优化查找,不使用每个记录循环遍历每个记录,例如,您可以删除/标记记录为"已处理"然后得到#34;未经处理的"记录,这样你的数组大小将在随后的each
循环中减少。