Rails 上的多个 Ruby 模型关系

Multiple Ruby on Rails Model Relationship

我正在尝试通过具有始发地和目的地的货件模型访问位置详细信息。

我想通过这样的调用访问位置信息:

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)}

因为您的 Shipment 模型实际上持有外键,所以我相信这是 belongs_to :origin 的情况。查看 RoR guides 了解更多信息。

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

可以

class Shipment < ActiveRecord::Base
...

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

end

对于年龄较大的 rails

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