HABTM Form不在rails中工作。没有提交到Join表

时间:2012-03-05 20:46:45

标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many

我正在尝试将球队分配给球员。一个玩家可以有很多团队,但在初始设置时他们只有一个。我正在尝试设置一个选项,以便用户可以选择一个团队。

当我提交表单时,其他字段的数据,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"}

我不知道从哪里开始。

2 个答案:

答案 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) %>

我相信应该这样做。