如何正确使用collection_select以及自定义关联

我有一个像这样的患者档案模式: –

class Profile < ActiveRecord::Base belongs_to :eyes, class_name: "EyeColor", foreign_key: "eyes" end 

数据库表有一个名为eyes的整数

我有一个EyeColor模型,它只有一个ID和描述(颜色的文字)

我已经制作了一个表格,上面有一个collection_select: –

 

现在,当我尝试通过表单更新记录时,我得到以下内容: –

 ActiveRecord::AssociationTypeMismatch (EyeColor(#45428760) expected, got String(#19387428)) 

我确信这很简单,但任何想法我做错了什么?

这里的问题是表单结构将查找:eyes属性并为其分配select将为其发送的字符串值。 但是Rails引擎期望这个属性的EyeColor对象,而不是String 。 您应该更改外键的名称:

 belongs_to :eye, class_name: "EyeColor", :foreign_key: "eye_id" 

或更好:

 belongs_to :eyecolor 

有了这个,你需要一个名为eye_colors的表,一个名为EyeColor的类和一个外键eye_color_id

顺便提问的问题:

https://stackoverflow.com/a/13356481/2943357

希望这可以帮助。