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

时间:2017-01-30 13:25:44

标签: ruby-on-rails attributes

我有一张研究所表和一张地点表。我从电子表格中提取了数据,目前有以下信息:

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'错误。我显然做错了什么,但不知道如何解决这个问题。

2 个答案:

答案 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循环中减少。

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