2011-03-01 5 views
4

레일스는 두 가지 (그리고 두 가지) 공항이있는 데이터 개념을 가지고 작업하고 있습니다. 마침내 내 외래 키를 하드 코딩하여 합리적인 방법을 찾았습니다. 내 models/route.rb레일스 3 : 다중 has_one 연관 및 시드

은 매우 간단하다 :

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을 실행하면 airport 테이블의 ID가 증가 할 때 from_airport_idto_airport_id 필드가 모두 1로 설정됩니다 (현재 실행 중 23 &24).

  1. 내가 뭘하는지보다 모델 코드를 처리 할 수있는 더 나은 방법이 있나요 :

    그래서 나는이 개 질문이?

  2. 내가 :-)

감사 시드에서 잘못하고있는 무슨

  • !

  • 답변

    9

    나는 각 관계에 대해 서로 다른 기호를 지정 모델을 변경할 것입니다 :

    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"> 
    
    +0

    그래, 알아두면 좋은 정보! 나는 그 변화를 만들었다. seeding 문제는 여전히 똑같습니다 (seeds.rb에서 아무 것도 변경하지 않았 음을 유의하십시오. 그렇게 생각하면, 나는 그것을 놓쳤습니다 :-) – tkrajcar

    +0

    시드를 수정하기위한 코드로 업데이트되었습니다. –

    +0

    위대한, 그게 고정. 감사! – tkrajcar

    관련 문제