n:m在rails活动记录上自行加入ruby

时间:2013-05-05 20:07:12

标签: ruby-on-rails-3 activerecord self-join model-associations

我正在尝试使用ruby on rails完成以下操作,并且我有问题让模型配置正确:

我想建立机场之间可能的联系。我创建了以下模型:

> rails generate model airport city name
> rails generate model connection airport_id destination_id

但是大多数n:m关联示例一方面处理两个不同模型之间的关联,另一方面处理自引用模型之间的关联,但我想模拟:每个模型之间的模型关联其他

我想做那样的事情:

ny = Airport.create({"city" => "New York"})
la = Airport.create({"city" => "Los Angeles"})

ny.destinations << la
la.destinations << ny

我找不到任何关于如何做到这一点的例子。

有没有人知道如何使用有效记录来完成类似的事情?

以下来自railscasts的文章似乎有所帮助:http://railscasts.com/episodes/163-self-referential-association

应用程序/模型/ airport.rb

class Airport < ActiveRecord::Base
  attr_accessible :city, :name

  has_many :connections
  has_many :destinations, :through => :connections
  has_many :inverse_connections, :class_name => "Connection", :foreign_key => "destination_id"
  has_many :inverse_destinations, :through => :inverse_connections, :source => :airport
end

app / models / connection.rb

class Connection < ActiveRecord::Base
  attr_accessible :airport_id, :destination_id

  belongs_to :airport
  belongs_to :destination, :class_name => "Airport"
end

为什么称它为“inverse_”? 您认为这是解决问题的最佳方案还是您能想到更好的解决方案? 性能/指数怎么样?

最好的问候 安德烈亚斯

0 个答案:

没有答案