2014-09-18 72 views
3

我有嵌套结果/匹配/ 16 /结果/ 13 /编辑在这样</p> <p>匹配的Active Record协会类型不匹配

在那里我有以下选择领域,这显示了正确的信息(团队。名称及其team.id)

<%= f.collection_select :winner, @select_winner_loser, :id, :name %> 

现在,当我尝试编辑我的结果而选择一个胜利者,我得到这样的:

的ActiveRecord :: AssociationTypeMismatch Team(#10504340)预计,得到String(#6163240)

“当分配给关联的对象的类型不正确时引发。http://api.rubyonrails.org/classes/ActiveRecord/AssociationTypeMismatch.html

赢家是对象,result.rb看起来像这样

class Result < ActiveRecord::Base 
    has_one :match 
    belongs_to :winner, class_name: "Team" 
    belongs_to :loser, class_name: "Team" 
end 

@select_winner_loser来自我results_controller

def edit 
    @select_winner_loser = [] 
    @select_winner_loser << @match.top 
    @select_winner_loser << @match.bottom 
    end 

Match.top &底部也是球队物体

class Match < ActiveRecord::Base 
    belongs_to :top, class_name: "Team" 
    belongs_to :bottom, class_name: "Team" 
    ... 
    belongs_to :result 
end 

我不明白为什么我会得到这个,因为我在我的选择领域有正确的对象,任何想法?

感谢

回答

12

变化

<%= f.collection_select :winner, @select_winner_loser, :id, :name %> 

<%= f.collection_select :winner_id, @select_winner_loser, :id, :name %> 

,并允许您相应的参数。当它看到名称中的_id时,Rails将创建一个Team对象。

+1

谢谢你lunr :),不得不改变我的迁移文件,我赢了,而不是我的db中的winner_id,并做出了你指出的改变。 – Pierre 2014-09-19 20:10:06