rails对象期望得到字符串

Kir*_*ran 4 activerecord ruby-on-rails erb ruby-on-rails-3.2

我见过类似的多个问题,但没有一个对我有用.

我有一个团队模型:

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
Run Code Online (Sandbox Code Playgroud)

在我的团队的_form.html.erb中,我指的是玩家

  <%= f.collection_select :p1, Player.all, :id, :name %>
Run Code Online (Sandbox Code Playgroud)

但是,在表单提交时,我看到错误:

Player(#28401456) expected, got String(#14111904)

Application Trace | Framework Trace | Full Trace
app/controllers/teams_controller.rb:47:in `new'
Run Code Online (Sandbox Code Playgroud)
Parameters:
{"utf8"=>"?",
 "authenticity_token"=>"GSIcEvROFnvgGWT4HvE2VNqRw4NxU1J8iAw/WhZeRLk=",
 "team"=>{"p1"=>"1"},
 "commit"=>"Create Team"}
Run Code Online (Sandbox Code Playgroud)

这是代码在线

def create
  @team = Team.new(params[:team])
  .....
end
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Kir*_*ran 6

最后,这工作:

 <%= f.collection_select :p1_id, Player.all, :id, :name %>
Run Code Online (Sandbox Code Playgroud)

这是神奇的:我的迁移有t.references p1,并在数据库中创建了一列p1_id.提交表单时,rails正在寻找以下内容填写引用的ID:

def create
  @team = Team.new(params[:team])
  .....
end
Run Code Online (Sandbox Code Playgroud)