加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – Rails 3:多个has_one关联和种子

发布时间:2020-12-17 03:44:52 所属栏目:百科 来源:网络整理
导读:我正在使用Rails似乎没有做到的数据概念 – 一条路线有两个(也就是两个)机场.我终于想出了如何对我的外键进行硬编码以使它们变得合情合理. 我的models / route.rb非常简单: class Route ActiveRecord::Base has_one :airport,:foreign_key = 'from_airport_
我正在使用Rails似乎没有做到的数据概念 – 一条路线有两个(也就是两个)机场.我终于想出了如何对我的外键进行硬编码以使它们变得合情合理.

我的models / route.rb非常简单:

class Route < ActiveRecord::Base
  has_one :airport,:foreign_key => 'from_airport_id',:class_name => 'Airport'
  has_one :airport,:foreign_key => 'to_airport_id',:class_name => 'Airport'
end

这一切似乎工作正常,但我似乎无法正确播种.

我的seeds.rb看起来像这样:

Airport.delete_all
@kpdx = Airport.create(:icao => 'KPDX',:name => 'Portland International Airport',:lat => '45.58869934',:lon => '-122.5979996')
@ksea = Airport.create(:icao => 'KSEA',:name => 'Seattle Tacoma International Airport',:lat => '47.4490013122559',:lon => '-122.30899810791')
Route.delete_all
Route.create(:from_airport_id => @kpdx,:to_airport_id => @ksea,:route => "RIVR6 BTG OLM6")
Route.create(:from_airport_id => @kpdx,:route => "BTG OLM OLM6")

Route.create(:from_airport_id => Airport.find_by_icao("KSEA"),:to_airport_id => Airport.find_by_icao("KPDX"),:route => "SEATL4 SEA HELNS4")
Route.create(:from_airport_id => Airport.find_by_icao("KSEA"),:route => "SEA HELNS4")

请注意,我有两种不同的方法可以告诉种子数据从我创建的一个机场到另一个机场.两者都不起作用.当我运行rake db:seed时,当机场表中的ID递增时(当前运行中的23和24),所有的from_airport_id和to_airport_id字段都设置为1.

所以我有两个问题:

>有没有比我正在做的更好的方法来处理模型代码?
>我在播种时做错了什么:-)

谢谢!

解决方法

我会改变你的模型,为每个关系指定一个不同的符号:

class Route < ActiveRecord::Base
  has_one :from_airport,:class_name => 'Airport'
  has_one :to_airport,:class_name => 'Airport'
end

由于启用has_one允许您通过名称(例如route.airport)访问该关系,因此这些需要不同.

要让你的播种工作,请在机场打电话给.id:

Route.create(:from_airport_id => @kpdx.id,:to_airport_id => @ksea.id,:route => "RIVR6 BTG OLM6")

例:

ruby-1.9.2-p136 :001 > a = Airport.create(:icao => 'KPDX',:name => 'Portland International Airport')
 => #<Airport id: 1,icao: "KPDX",name: "Portland International Airport",created_at: "2011-03-01 02:44:42",updated_at: "2011-03-01 02:44:42">
ruby-1.9.2-p136 :002 > b = Airport.create(:icao => 'ABCD',:name => 'Another Airport')
 => #<Airport id: 2,icao: "ABCD",name: "Another Airport",created_at: "2011-03-01 02:46:22",updated_at: "2011-03-01 02:46:22">
ruby-1.9.2-p136 :003 > r = Route.create(:to_airport_id => a.id,:from_airport_id => b.id)
 => #<Route id: 3,from_airport_id: 2,to_airport_id: 1,route: nil,created_at: "2011-03-01 02:46:36",updated_at: "2011-03-01 02:46:36">

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读