更多上下文。我正在使用设计来创建成员。注册后,我希望用户从主题数据库中选择一个项目,并使该项目与该成员相关联。所以我可以在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' %>
答案 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