我见过类似的多个问题,但没有一个对我有用。
我有一个团队模型:
class Team < ActiveRecord::Base
has_one :p1, :class_name => "Player", :foreign_key => 'player_id', :validate => true
has_one :p2, :class_name => "Player", :foreign_key => 'player_id', :validate => true
end
在我的团队的_form.html.erb中,我指的是玩家
<%= f.collection_select :p1, Player.all, :id, :name %>
但是,在表单提交时,我看到错误:
Player(#28401456) expected, got String(#14111904)
Application Trace | Framework Trace | Full Trace
app/controllers/teams_controller.rb:47:in `new'
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"GSIcEvROFnvgGWT4HvE2VNqRw4NxU1J8iAw/WhZeRLk=",
"team"=>{"p1"=>"1"},
"commit"=>"Create Team"}
这是第
行的代码def create
@team = Team.new(params[:team])
.....
end
有什么想法吗?
答案 0 :(得分:6)
最后,这有效:
<%= f.collection_select :p1_id, Player.all, :id, :name %>
这是魔术: 我的迁移有t.references p1,并在数据库中创建了一列p1_id。 提交表单时,rails正在寻找以下内容填写引用的ID:
def create
@team = Team.new(params[:team])
.....
end
答案 1 :(得分:0)
试试这个:
<%= f.collection_select :player_id, Player.all, :id, :name %>
答案 2 :(得分:0)
我可能错了,但我的猜测是,而不是
<%= f.collection_select :p1, Player.all, :id, :name %>
你需要
<%= f.collection_select :p1, :team_id, Player.all, :id, :name %>