ActiveRecord关联类型不匹配

时间:2013-07-14 19:45:01

标签: ruby-on-rails ruby devise

更多上下文。我正在使用设计来创建成员。注册后,我希望用户从主题数据库中选择一个项目,并使该项目与该成员相关联。所以我可以在consol中调用item.members.new而不会出现以下任何错误:

ActiveRecord::AssociationTypeMismatch: Carrier(#97584750) expected, got String(#83658370)

设计注册/新视图 http://pastebin.com/KGnJQp2N

会员模特 http://pastebin.com/VmDbpSpY

运营商模型 http://pastebin.com/DPEV1NMd

运营商控制器 http://pastebin.com/uFfh9KrP

我确信错误在以下几行:

<div><%= f.label :carrier %><br />
<%= f.select :carrier, 
              options_for_select([["Select One", ""], *Carrier.all.map(&:name)]),
              :class => 'genForm_dropBox' %>

1 个答案:

答案 0 :(得分:1)

我会采取刺戳并说你在控制器中这样做:

member.carrier = params[:carrier]

params[:carrier]是一个字符串,其中包含carrier.name。您要做的是首先在选择中分配一个ID以及您的选项:

options_for_select([["Select One", ""], *Carrier.all.map{ |c| [c.name, c.id] })

在您的控制器中,您将检查是否设置了运营商,如果是,请根据ID找到它并分配给该协会:

member.carrier = Carrier.find(params[:carrier]) unless params[:carrier].blank?

或..

if params[:carrier].present?
  member.carrier = Carrier.find(params[:carrier])
end