2015-05-29 171 views
0

我試圖通過具有起點和目的地的裝運模型來訪問位置詳細信息。多個Ruby on Rails模型關係

我想訪問位置信息通這樣的電話:

Shipment.find(###).origin -> 
    :id => "###", :cs => "Springfield, Mo", :latitude => "#####", :longitude => "####" 

Shipment.find(###).dest -> 
    :id => "###", :cs => "Springfield, Mo", :latitude => "#####", :longitude => "####" 

我有以下設置

shipment.rb:

class Shipment < ActiveRecord::Base 
    belongs_to :user 
    has_many :vehicles, dependent: :destroy 

    validates :origin_id, :dest_id, :presence => true 

    attr_accessible :origin_id, :dest_id, (more attributes...) 
end 

location.rb

class Location < ActiveRecord::Base 
    attr_accessible :cs, :latitude, :longitude 
    geocoded_by :cs 
    after_validation :geocode, :if => :cs_changed? 
    has_many :shipments, :foreign_key => :origin_id 
    has_many :shipments, :foreign_key => :dest_id 
end 

我覺得是這樣的:

has_one :origin, :class => "Location", :origin_id 

scope :origin, -> (:origin_id) { Location.find(:origin_id)} 

回答

2

它可以

class Shipment < ActiveRecord::Base 
... 

    belongs_to :origin, class: 'Location', foreign_key: 'origin_id' 
    belongs_to :dest, class: 'Location', foreign_key: 'dest_id' 

end 

對於老軌

class Shipment < ActiveRecord::Base 
    ... 

     belongs_to :origin, class_name: 'Location', foreign_key: 'origin_id' 
     belongs_to :dest, class_name: 'Location', foreign_key: 'dest_id' 

end 

然後爲原點位置

Shipment.find(###).origin 

那麼對於目標位置

Shipment.find(###).dest 
0

由於您Shipment模型實際持有外鍵,這是一個belongs_to :origin情況,我相信。查看RoR guides瞭解更多信息。

+0

但它會'belongs_to的:因爲出身不是模型 –

+1

@BigAlRubyNewbie的'belongs_to'方法指定關係的名稱location'。您可以使用'class_name'選項指定類名('Location')。 –

2

shipment.rb

class Shipment < ActiveRecord::Base 
    belongs_to :user 
    has_many :vehicles, dependent: :destroy 

    validates :origin_id, :dest_id, :presence => true 

    attr_accessible :origin_id, :dest_id 
    belongs_to :origin, :class_name => 'Location', :foreign_key => 'origin_id' 
    belongs_to :destination, :class_name =>'Location', :foreign_key => 'dest_id' 
end 
+0

'Shipment.last.origin ArgumentError:Unknown key:class' –

+0

您正在使用rails 3或4? –

+0

我正在使用rails 3 –