#RubyOnRails 多对多关系未插入连接 table
#RubyOnRails Many to Many relationship not inserting into join table
我正在创建一个应用程序,同时学习如何在 Ruby 中编写代码。我正在制作一个简单的联赛应用程序,我可以在其中创建新的球队、球员、联赛...
我有一个团队模型和一个联赛模型,因为一支球队可以进入多个联赛,而一个联赛可以有多个球队,所以它们是多对多协会。但是,当我创建/编辑团队时,它不会将任何内容插入连接 table,只会更改其他属性。
模特:
团队模型
class Team < ActiveRecord::Base
validates_presence_of :name
has_many :teams_join_leagues, :dependent => :destroy
has_many :leagues, through: :teams_join_leagues
end
联赛模式
class League < ActiveRecord::Base
validates_presence_of :name, :begindate, :enddate, :prizepool, :season_id
validate :start_must_be_before_end_time
has_many :teams_join_leagues, :dependent => :destroy
has_many :teams, through: :teams_join_leagues
加入TeamLeague模型
class TeamsJoinLeague < ActiveRecord::Base
belongs_to :team
belongs_to :league
end
TeamController 参数函数:
def team_params
params.require(:team).permit(:name, leagues: [:id])
end
创建函数:
def create
@team = Team.new(team_params)
respond_to do |format|
if @team.save
format.html { redirect_to @team, notice: 'Team was successfully created.' }
format.json { render :show, status: :created, location: @team }
else
format.html { render :new }
format.json { render json: @team.errors, status: :unprocessable_entity }
end
end
end
我做错了什么?它从不在连接 table 上插入任何内容,让所有球队都没有联赛 :/
我假设你的 teams_join_leagues table 是这样的:
create_table "teams_join_leagues", force: :cascade do |t|
t.integer "team_id"
t.integer "league_id"
....
end
所以在您的创建团队中,它应该看起来像这样或类似的
def create
@league = current_team.teams_join_leagues.build(league_id: params[:league_id])
if @league.save
....
end
我正在创建一个应用程序,同时学习如何在 Ruby 中编写代码。我正在制作一个简单的联赛应用程序,我可以在其中创建新的球队、球员、联赛...
我有一个团队模型和一个联赛模型,因为一支球队可以进入多个联赛,而一个联赛可以有多个球队,所以它们是多对多协会。但是,当我创建/编辑团队时,它不会将任何内容插入连接 table,只会更改其他属性。
模特:
团队模型
class Team < ActiveRecord::Base
validates_presence_of :name
has_many :teams_join_leagues, :dependent => :destroy
has_many :leagues, through: :teams_join_leagues
end
联赛模式
class League < ActiveRecord::Base
validates_presence_of :name, :begindate, :enddate, :prizepool, :season_id
validate :start_must_be_before_end_time
has_many :teams_join_leagues, :dependent => :destroy
has_many :teams, through: :teams_join_leagues
加入TeamLeague模型
class TeamsJoinLeague < ActiveRecord::Base
belongs_to :team
belongs_to :league
end
TeamController 参数函数:
def team_params
params.require(:team).permit(:name, leagues: [:id])
end
创建函数:
def create
@team = Team.new(team_params)
respond_to do |format|
if @team.save
format.html { redirect_to @team, notice: 'Team was successfully created.' }
format.json { render :show, status: :created, location: @team }
else
format.html { render :new }
format.json { render json: @team.errors, status: :unprocessable_entity }
end
end
end
我做错了什么?它从不在连接 table 上插入任何内容,让所有球队都没有联赛 :/
我假设你的 teams_join_leagues table 是这样的:
create_table "teams_join_leagues", force: :cascade do |t|
t.integer "team_id"
t.integer "league_id"
....
end
所以在您的创建团队中,它应该看起来像这样或类似的
def create
@league = current_team.teams_join_leagues.build(league_id: params[:league_id])
if @league.save
....
end