1

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

1 回答 1

1

我会刺伤并说您正在控制器中执行此操作:

member.carrier = params[:carrier]

Butparams[: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
于 2013-07-14T20:16:20.880 回答