4

これに似た質問を複数見ましたが、うまくいきませんでした。

私はチームモデルを持っています:

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

アイデアはありますか?

4

3 に答える 3

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
于 2013-03-27T21:59:27.600 に答える
0

これを試して:

<%= f.collection_select :player_id, Player.all, :id, :name %>
于 2013-03-27T20:06:18.190 に答える
0

私は間違っているかもしれませんが、私の推測では

<%= f.collection_select :p1, Player.all, :id, :name %>

あなたが必要

<%= f.collection_select :p1, :team_id, Player.all, :id, :name %>

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select

于 2013-03-27T20:06:39.530 に答える