Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从rails中的表引用获取外键_Ruby On Rails_Attributes - Fatal编程技术网

Ruby on rails 从rails中的表引用获取外键

Ruby on rails 从rails中的表引用获取外键,ruby-on-rails,attributes,Ruby On Rails,Attributes,我有一张机构表和一张地点表。我从电子表格中提取数据,目前拥有以下信息: Institute id, name, ukprn Location id, name, ukprn, lat, long, institute ukprn是通过政府提供的唯一id,但未来一些机构可能没有此id,因此我不想专门将其用作参考。我认为我需要做的是Location.institute属性包含institute.id,其中institute.ukprn和Location.ukprn匹配,但我不确定这将如何工作

我有一张机构表和一张地点表。我从电子表格中提取数据,目前拥有以下信息:

Institute

id, name, ukprn

Location

id, name, ukprn, lat, long, institute
ukprn
是通过政府提供的唯一id,但未来一些机构可能没有此id,因此我不想专门将其用作参考。我认为我需要做的是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”错误。我显然做错了什么,但不知道该怎么做。

在一个类上调用每个方法是没有意义的。首先获取所有地点和机构,然后执行以下操作:

@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
我想可能有更好的方法来优化查找,不使用each循环每个记录,例如,您可以删除/标记一个记录为“已处理”,然后稍后只获取“未处理”的记录,这样您的数组大小将在后续的
每个
循环中减小


希望有帮助!如果您看起来像这样,请告诉我。

您将得到
未定义的方法每个错误
,因为作为模型类的位置没有每个方法。代码中还有其他错误

你必须按照下面的方法来做

Institute.find_each do |institute|
  Location.where(ukprn: institute.ukprn).update_all(institute_id: institute.id)
end

在每个学院的代码中,你要检查对应于所有位置的<代码> UKPRN/COD>,每个匹配的位置的机构ID将被学院ID更新。

你可以考虑使用FiffyAs,而不是ALL。这样在运行时它会更快,内存占用更少。@SatyamSingh是的。你是对的。更新了我的答案,效果很好。谢谢你们的代码和解释!