我正在尝试将球队分配给球员。一个玩家可以有很多团队,但在初始设置时他们只有一个。我正在尝试设置一个选项,以便用户可以选择一个团队。
当我提交表单时,其他字段的数据,first_name和last_name提交正常,但是没有数据保存在连接表中。我正在使用一个选择框,但如果有人能想到这一点,复选框也可以完成工作。
我有2个型号。玩家和团队建立了HABTM关系。
class Player < ActiveRecord::Base
has_and_belongs_to_many :teams
class Team< ActiveRecord::Base
has_and_belongs_to_many :players
def new
@player = Player.new
end
def create
@player = Player.new(params[:player])
if @player.save
flash[:notice] = "Player Created"
redirect_to(:action =>'list')
else
render('new')
end
end
我可以从rails控制台将数据插入到连接表中。然后,我可以获取此数据并显示它。所以关系有效。
create_table "players_teams", :id => false, :force => true do |t|
t.integer "player_id"
t.integer "team_id"
end
add_index "players_teams", ["player_id", "team_id"], :name => "index_players_teams_on_player_id_and_team_id"
在我看来,我有这个
<%= f.collection_select(:team_id, Team.all, :id, :name, :prompt => true) %>
这将加载团队填充的视图。提交后我得到了
Parameters: {"utf8"=>"✓", "authenticity_token"=>"kvOmx3G5H1mqLMnEn6HS3a79+WQnIzfsUA3Dt0XHo1w=", "player"=>{"first_name"=>"Test", "last_name"=>"Data", "email"=>"email@email.com"}, "teams"=>{"team_id"=>"1"}, "commit"=>"create player"}
我不知道从哪里开始。
答案 0 :(得分:2)
你在表格上的哪个地方放了收藏品?也许这是一个错字,但应该是
<%= form_for(@player) do |f| %>
...
<%= f.collection_select(:team_ids, Team.all, :id, :name, :prompt => true) %>
...
<% end %>
你应该
Parameters: {
"utf8"=>"✓", "authenticity_token"=>"kvOmx3G5H1mqLMnEn6HS3a79+WQnIzfsUA3Dt0XHo1w=",
"player"=>{
"first_name"=>"Test",
"last_name"=>"Data",
"email"=>"email@email.com",
"team_ids"=>["1"]
},
"commit"=>"create player"
}
表示team_ids属性由表单设置。
答案 1 :(得分:0)
您的参数不正确。由于玩家has_and_belongs_to_many :teams
,正确的参数为team_ids
。但是,这应该是一个数组,所以你需要这样的东西:
<%= f.collection_select("team_ids[]", Team.all, :id, :name, :prompt => true) %>
我相信应该这样做。