Ruby on rails Rails嵌套表单不会为多对多关系创建新记录

Ruby on rails Rails嵌套表单不会为多对多关系创建新记录,ruby-on-rails,many-to-many,nested-forms,nested-attributes,Ruby On Rails,Many To Many,Nested Forms,Nested Attributes,几个小时以来,我一直在努力让这一切顺利进行 类播放器:signature英雄,:source=>:hero,:dependent=>:destroy 有很多:签名英雄 接受\u嵌套的\u属性\u用于:签名\u heros 有很多:英雄,:通过=>:细节 终止 类签名hero:player,:dependent=>:destroy 有很多:签名英雄 有很多:玩家,:通过=>:详细信息 终止 播放器/控制器 获取/玩家/新 def新 @player=player.new 签名\英雄=@player.

几个小时以来,我一直在努力让这一切顺利进行

类播放器:signature英雄,:source=>:hero,:dependent=>:destroy 有很多:签名英雄 接受\u嵌套的\u属性\u用于:签名\u heros 有很多:英雄,:通过=>:细节 终止 类签名hero:signature英雄,:source=>:player,:dependent=>:destroy 有很多:签名英雄 有很多:玩家,:通过=>:详细信息 终止 播放器/控制器 获取/玩家/新 def新 @player=player.new 签名\英雄=@player.signature\英雄.build 终止 def播放器参数 参数要求:玩家。允许:姓名,:帐户id,:团队id,签名英雄属性:[:id,:玩家id,:英雄id] 终止 这些是我的模型,我的

true},类:表单控件%> true},类:表单控件%> 现在,当我单击submit按钮保存新的播放器时,播放器本身会被保存,但多对多关系不会。 这就是rails服务器的输出

Parameters: {"utf8"=>"✓", "authenticity_token"=>"gMQTrtoKCmyZoVfP34DUbU6Arzu9DQ+IrHiFC68QH8I=", "player"=>{"team_id"=>"", "name"=>"qwqweqwe", "account_id"=>"111111"}, "signature_hero"=>{"hero_id"=>"1"}, "commit"=>"Create Player"}
   (0.1ms)  BEGIN
  Player Exists (0.3ms)  SELECT 1 AS one FROM `players` WHERE `players`.`account_id` = BINARY 111111 LIMIT 1
  SQL (0.2ms)  INSERT INTO `players` (`account_id`, `name`) VALUES (111111, 'qwqweqwe')
   (13.2ms)  COMMIT
将签名的选择标记更改为


没有s。传递给控制器的参数是signature\u hero=>{hero\u id=>1},而它们应该是signature\u hero\u attributes=>{hero\u id=>1}

你也能粘贴你的控制器吗。更新了我的原始帖子,添加了players_controllertry的def new将集合_select更改为s.collection_select查看完整解释的答案。非常感谢,这起到了作用:,它现在也保存了多对多关系,现在提出了另一个问题,我的数据库中已经有没有这种关系的玩家,但是当我想要编辑它们时,英雄选择将不会出现。您是否在更新操作中像在新操作中一样建立关联,即签名\u Hero=@player.signature\u heros.build?。可能需要检查更新操作中是否已经存在签名heros。哦,不,忘记添加了,我现在的编辑操作中有GET/players/1/edit def edit if@player.signature\u heros.empty?3.times{signature\u hero=@player.signature\u heros.build}end
 <%= s.collection_select( :hero_id, Hero.all, :id, :name, { :include_blank => true }, class: "form-control" ) %>