与同一模型相关联

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与同一模型相关联相关的知识,希望对你有一定的参考价值。

我有一个City模型,我想与另一个被称为姐妹城市的城市建立一个可选择的关系。为了避免向cities添加另一列,我想创建一个包含关联的连接表。

create_table :sister_city_mappings do |t|
  t.integer :city_id
  t.integer :sister_city_id

  t.timestamps null: false
end

class City
  has_one :sister_city_mapping, :class_name => 'SisterCityMapping', 
  foreign_key: :city_id
  has_one :sister_city, :class_name => 'City', through: 
  :sister_city_mapping, source: :sister_city
end

class SisterCityMapping
  belongs_to :city, :class_name => 'City'
  belongs_to :sister_city, :class_name => 'City',
  foreign_key: :sister_city_id
end

这种作品,因为我可以做City.first.sister_city = City.last但我无法通过形式参数处理这种关系,就像我想的那样干净:

City.first.sister_city_id = 2
NoMethodError: undefined method `sister_city_id=' for #<City:0x007f893be1b178>

并尝试:

City.first.sister_city = 2
ActiveRecord::AssociationTypeMismatch: City(#70113697769780) expected, got Fixnum(#70113638622260)

我认为这种关联很可能不正确,我也尝试过SisterCityMapping has_one :sister_city,但没有成功。

答案

你真的应该只在你的cities表中添加一个sister_city_id列:

class City
  has_one :sister_city, :class_name => 'City'
end

如果您确实想使用此连接表关联,则可以创建如下关系:

City.first.sister_city = City.find(2)

以上是关于与同一模型相关联的主要内容,如果未能解决你的问题,请参考以下文章

多个套接字可以与 UDP 的同一端口相关联吗?

可以与两个父母相关联的 Django 模型

将用户与 Rails 中的嵌套模型相关联

Django REST框架--认证和权限

将现有图像文件与 Django 模型相关联

如何将模型与 GraphQL 界面上的“具有一个”关系相关联