Ruby on rails HABTM表格不在轨道中工作。未提交到联接表中

Ruby on rails HABTM表格不在轨道中工作。未提交到联接表中,ruby-on-rails,ruby-on-rails-3,has-and-belongs-to-many,Ruby On Rails,Ruby On Rails 3,Has And Belongs To Many,我正试图将一支球队分配给一名球员。一名球员可以有多支球队,但在初始设置时,他们只有一支球队。我正在尝试设置一个选项,以便用户可以选择一个团队 当我提交表单时,其他字段的数据,first_name和last_name提交很好,但是没有数据保存在联接表中。我使用了一个选择框,但是如果有人能想到的话,复选框也会起作用 模型 我有两个模型。与HABTM建立关系的球员和球队 class Player < ActiveRecord::Base has_and_belongs_to_many :team

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

当我提交表单时,其他字段的数据,first_name和last_name提交很好,但是没有数据保存在联接表中。我使用了一个选择框,但是如果有人能想到的话,复选框也会起作用

模型 我有两个模型。与HABTM建立关系的球员和球队

class Player < ActiveRecord::Base
has_and_belongs_to_many :teams

class Team< ActiveRecord::Base
has_and_belongs_to_many :players
联接表 我可以从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) %>

我不知道从这里到哪里去

您的参数不正确。因为一个玩家
拥有并且属于多个:团队
,所以合适的参数是
团队ID
。但是,这应该是一个数组,因此您需要如下内容:

<%= f.collection_select("team_ids[]", Team.all, :id, :name, :prompt => true) %>
true)%>

我认为应该这样做。

你把收藏放在表格的什么地方?也许这是一个拼写错误,但应该是

<%= form_for(@player) do |f| %>
  ...
  <%= f.collection_select(:team_ids, Team.all, :id, :name, :prompt => true) %>
  ...
<% end %>

这意味着team_ids属性由表单设置。

您的问题是在创建操作中没有对params[:teams]执行任何操作。团队ID不在参数[:player]散列中;)它起作用了!这件事我已经坚持了一个星期了!我对你感激不尽,我已经做到了!但不能投票!现在我已经做到了,我可以继续。。。。。但现在我可以和一些部落一起庆祝:扬升。我想你应该去看看!使用此选项会引发以下错误:“参数数量错误(0表示1..2)”
<%= f.collection_select("team_ids[]", Team.all, :id, :name, :prompt => true) %>
<%= 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"
 }