Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4-使用has_和_属于许多协会_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails 4-使用has_和_属于许多协会

Ruby on rails rails 4-使用has_和_属于许多协会,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有两种类型的数据:团队数据和游戏数据。一支球队可以参加多个比赛,例如,一所大学可以打篮球、足球和足球,每场比赛自然都有许多球队参加联盟 class Game < ActiveRecord::Base has_and_belongs_to_many :teams end class Team < ActiveRecord::Base has_and_belongs_to_many :games end 到目前为止还不错 我需要建立一个表单来添加新团队,但我无法正确显示游戏

我有两种类型的数据:团队数据和游戏数据。一支球队可以参加多个比赛,例如,一所大学可以打篮球、足球和足球,每场比赛自然都有许多球队参加联盟

class Game < ActiveRecord::Base
  has_and_belongs_to_many :teams
end

class Team < ActiveRecord::Base
  has_and_belongs_to_many :games
end
到目前为止还不错

我需要建立一个表单来添加新团队,但我无法正确显示游戏:

<%= form_for @team, :html => {:class => 'form-horizontal form', :role => 'form'} do |f| %>
  <%= f.collection_select(:game_id, Game.all, :id, :name) %>
这会为游戏抛出一个未定义的方法\u id错误

如何在使用团队对象时正确插入游戏id,以及在添加游戏时正确插入团队id?我意识到这些应该处理一个多选择的场景,但目前我无法让任何一个都起作用


谢谢

我相信你想用has\u many through来代替has\u,并且\u属于\u many。比如:

class Game < ActiveRecord::Base
  has_many :game_teams
  has_many :teams, :through => :game_teams
end

class Team < ActiveRecord::Base
  has_many :game_teams
  has_many :games, :through => :game_teams
end

尝试使用关联而不是集合\u选择

<%= form_for @team, :html => {:class => 'form-horizontal form', :role => 'form'} do |f| %>
    <%= f.association :game, collection: Game.all.map{|p| [p.id, p.name]}, :label => 'Drive', :prompt => "Select Game" %>

您正在寻找的答案是使用game_id[]代替:

这应该为has_和属于多个数据设置集合值。当我进入办公室时,我必须对此进行测试-它肯定有效,但语法是否正确是我必须找到的

集合上的第一个参数是所描述对象的属性。那么这条线

f、 集合\u选择:game\u id,game.all,:id,:name

尝试调用对象团队上的game_id,但失败

我不确定rails是否支持直接方法来帮助您构建这种关联。您始终可以使用和使用multiple构造一个解决方案:由于它是一个has\u且\u属于\u many,因此请向您的操作发送一系列游戏ID并手动处理


你也可以看看这个

什么是商品?你确定@team有团队,还有Game。所有人都返回游戏吗?@fotanus-抱歉,输入错误-“商品”是错误中的名称,我更改了实际数据的名称,以便更清楚地了解我所说的内容。两者之间有什么不同?看起来它们是一样的@MikeS-我会尝试一下,尽管我相信当中间表有自己的模型时会使用through-否则会使用has_和_-belish_-to_-many。@anusha-这返回了未定义的方法关联oh,事实上,我已经使用了这个简单表单的关联输入,但这里是您的使用表单。请尝试使用简单表单的简单表单。请查看此链接以获取参考:@anusha-我更喜欢先使用普通rails,这样我就可以在安装更多的gems之前了解它的工作原理。谢谢你!
<%= form_for @team, :html => {:class => 'form-horizontal form', :role => 'form'} do |f| %>
    <%= f.association :game, collection: Game.all.map{|p| [p.id, p.name]}, :label => 'Drive', :prompt => "Select Game" %>
#View
<%= f.collection_select(:game_ids, Game.all, :id, :name) %>

#Controller
def create
   @team = Team.new(Team_params)
   @team.save
end

private

def team_params
    params.require(:team).permit(game_ids: [])
end