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

时间:2013-11-21 17:05:07

标签: ruby-on-rails ruby-on-rails-4

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

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

数据库表有一个名为eyes

的整数

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

我已经制作了一个表格,其上有一个collection_select: -

<div class="field">
    <%= f.label :eyes %><br>
    <%= f.collection_select :eyes, EyeColor.all, :id, :description  %>
</div>

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

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

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

1 个答案:

答案 0 :(得分:0)

这里的问题是表单结构将查找: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

希望这有帮助。