具有自定义外键列名称的 Activeadmin 表单
Activeadmin form with a custom foreign key column name
我有两个模型 Person
和 Car
,我无法更改数据库模式,它在 Persons
table.
到目前为止没问题,因为我在 Person
模型中使用了以下行:
belongs_to :car, class_name: 'Car', foreign_key: 'car'
现在例如,如果我尝试 Person.last.car
它 returns 一个基于本栏中 Car ID
的 Car
对象。
但问题出在 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
冲突=] 这就是错误的原因
我有两个模型 Person
和 Car
,我无法更改数据库模式,它在 Persons
table.
到目前为止没问题,因为我在 Person
模型中使用了以下行:
belongs_to :car, class_name: 'Car', foreign_key: 'car'
现在例如,如果我尝试 Person.last.car
它 returns 一个基于本栏中 Car ID
的 Car
对象。
但问题出在 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
冲突=] 这就是错误的原因