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
我正在尝试通过具有始发地和目的地的货件模型访问位置详细信息。
我想通过这样的调用访问位置信息:
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