Phoenix - 1 到 none 关系

Phoenix - 1 to none relationship

我正在寻找一种单向关系,我最好将其描述为 1-0。

我基本上希望汽车有特定的发动机,但不是发动机有特定的汽车...

  1. 汽车只有一个引擎,但可以有多个不同的引擎
  2. 引擎可以同时属于许多不同的汽车,为了实现这一点,它需要独立于数据库中的汽车。 (引擎没有车号,因为同一个引擎可以被很多车引用。)

这是我目前拥有的:

  schema "cars" do
     has_one :engine, Engine

     field :make, string
  end

  create table(:cars) do
     add :make, string
     add :engine_id, :integer
  end 

  schema "engines" do
     add :pistons, integer
  end

  create table(:engines) do
     add :pistons, integer
  end 

我在这种关系中遇到的具体问题是:

unknown field `:engine_id` given to cast. Either the field does not exist or it is a :through association (which are read-only).

这意味着 has_one 显然没有将 engine_id 字段添加到模式中以进行转换。当我将 has_one 替换为与汽车的 belongs_to 关系时,会产生我想要的功能,但这没有任何逻辑意义......汽车不属于引擎......引擎属于到汽车。

想象一下网站中的下拉菜单...并且您想让用户能够为发动机选择不同数量的活塞,或者具有多种选项的发动机的某些特性...例如燃料类型.发动机将不属于活塞或燃料类型...

建立这种关系的正确方法是什么?

据我所知,belongs_to 是汽车的正确关联。

你说得对,用英语说汽车属于发动机是没有意义的,但 belongs_to/3 的文档表明这就是你要找的东西:

You should use belongs_to in the table that contains the foreign key.

听起来 has_many/3 是您想要的引擎。在一对多关系中,“一个”table(引擎)没有“多个”table(汽车)的 ID;相反,它依赖于“许多”table(汽车)具有指向“一个”table(引擎)的外键。