具有自定义外键列名称的 Activeadmin 表单

Activeadmin form with a custom foreign key column name

我有两个模型 PersonCar,我无法更改数据库模式,它在 Persons table.

到目前为止没问题,因为我在 Person 模型中使用了以下行:

belongs_to :car,  class_name: 'Car', foreign_key: 'car'

现在例如,如果我尝试 Person.last.car 它 returns 一个基于本栏中 Car IDCar 对象。

但问题出在 Activeadmin 上,因为如果用户尝试编辑 Person 记录,它默认加载当前的 Car 和 select列表,但它没有。

我的表单代码:

form do |f|
    f.inputs 'Person Details' do
        ....
        ....
        f.input :car
        ....
        ....
    end
end

另外,如果我 select 编辑任何汽车并点击提交,我就会遇到这个错误 Car(#97670400) expected, got String(#19439720)

我还尝试为该列创建别名,但没有成功

alias_attribute :ca_id, :car

我正在使用 Rails 5.0.2 和最新的 ActiveAdmin

Car(#97670400) expected, got String(#19439720)

正如我所说,直接而简单的答案是将列名称更改为 car_id(推荐) 并以 f.input :car_id 之类的形式使用它,但正如您坚持尝试为 关联 提供不同(但有意义)的名称一样。如下所示

belongs_to :person_car, class_name: 'Car', foreign_key: 'car'

解释:

  • 命名冲突

您应该避免命名冲突f.input :car中的car(列名)与[=16中的关联名car冲突=] 这就是错误的原因