我使用的是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, :to_airport_id => @ksea, :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"), :to_airport_id => Airport.find_by_icao("KPDX"), :route => "SEA HELNS4")请注意,我有两种不同的方法试图告诉种子数据从我创建的一个机场到另一个机场。两个都不管用。当我运行rake db:seed时,所有的from_airport_id和to_airport_id字段都被设置为1,此时airport表中的I正在递增(在当前运行时为23& 24 )。
所以我有两个问题:
谢谢!
发布于 2011-03-01 00:23:18
我会更改您的模型,为每个关系指定一个不同的符号:
class Route < ActiveRecord::Base
has_one :from_airport, :foreign_key => 'from_airport_id', :class_name => 'Airport'
has_one :to_airport, :foreign_key => 'to_airport_id', :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">https://stackoverflow.com/questions/5149128
复制相似问题