将 MODEL_id 传递给另一个模型参数
Pass in MODEL_id to another model params
我有两个模型:游戏和作业。当我创建一个游戏时,我想自动创建一个 Assignment 以配合该游戏,因此两者之间存在关联。在我的游戏控制器中,我有:
def create
@game = Game.new(game_params)
@assignment = Assignment.new(assignment_params)
respond_to do |format|
if @game.save
format.html { redirect_to @game, notice: "Game was successfully created." }
format.json { render :show, status: :created, location: @game }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @game.errors, status: :unprocessable_entity }
end
end
end
private
def game_params
params.require(:game).permit(:home_team, :away_team)
end
def assignment_params
params.require(:assignment).permit(@game.game_id)
end
end
如何在创建游戏时将 game_id 传递给分配参数?我下面的模型以防万一。我的分配模型中有一个 game_id
列。
class Game < ApplicationRecord
has_one :assignment, dependent: :destroy
has_many :users, through: :assignments
end
class Assignment < ApplicationRecord
belongs_to :game
belongs_to :center_referee, class_name: 'User', foreign_key: "user_id"
belongs_to :assistant_referee_1, class_name: 'User', foreign_key: "user_id"
belongs_to :assistant_referee_2, class_name: 'User', foreign_key: "user_id"
end
游戏形式
<%= simple_form_for(@game) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="form-inputs">
<%= f.input :home_team %>
<%= f.input :away_team %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
游戏控制器
def new
@game = Game.new
end
# POST /games or /games.json
def create
@game = Game.new(game_params)
respond_to do |format|
if @game.save
format.html { redirect_to @game, notice: "Game was successfully created." }
format.json { render :show, status: :created, location: @game }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @game.errors, status: :unprocessable_entity }
end
end
end
在我的头顶,您可以简单地 运行 Game 模型中的一个简单回调,如下所示:
after_create :create_assignment
def create_assignment
Assignment.create(game_id: id, center_referee_id: , assistant_referee_1_id:, assistant_referee_2_id:)
end
这样你就可以在模型级别处理一次。每个创建的游戏都会自动创建一个作业。
此外,如果不需要 referees
,您可以将 optional: true
标志传递给 assignment
模型中的 belongs_to
。这样您就可以安全地创建游戏。因为目前尚不清楚您是如何从中获取裁判详细信息的。
我有两个模型:游戏和作业。当我创建一个游戏时,我想自动创建一个 Assignment 以配合该游戏,因此两者之间存在关联。在我的游戏控制器中,我有:
def create
@game = Game.new(game_params)
@assignment = Assignment.new(assignment_params)
respond_to do |format|
if @game.save
format.html { redirect_to @game, notice: "Game was successfully created." }
format.json { render :show, status: :created, location: @game }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @game.errors, status: :unprocessable_entity }
end
end
end
private
def game_params
params.require(:game).permit(:home_team, :away_team)
end
def assignment_params
params.require(:assignment).permit(@game.game_id)
end
end
如何在创建游戏时将 game_id 传递给分配参数?我下面的模型以防万一。我的分配模型中有一个 game_id
列。
class Game < ApplicationRecord
has_one :assignment, dependent: :destroy
has_many :users, through: :assignments
end
class Assignment < ApplicationRecord
belongs_to :game
belongs_to :center_referee, class_name: 'User', foreign_key: "user_id"
belongs_to :assistant_referee_1, class_name: 'User', foreign_key: "user_id"
belongs_to :assistant_referee_2, class_name: 'User', foreign_key: "user_id"
end
游戏形式
<%= simple_form_for(@game) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="form-inputs">
<%= f.input :home_team %>
<%= f.input :away_team %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
游戏控制器
def new
@game = Game.new
end
# POST /games or /games.json
def create
@game = Game.new(game_params)
respond_to do |format|
if @game.save
format.html { redirect_to @game, notice: "Game was successfully created." }
format.json { render :show, status: :created, location: @game }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @game.errors, status: :unprocessable_entity }
end
end
end
在我的头顶,您可以简单地 运行 Game 模型中的一个简单回调,如下所示:
after_create :create_assignment
def create_assignment
Assignment.create(game_id: id, center_referee_id: , assistant_referee_1_id:, assistant_referee_2_id:)
end
这样你就可以在模型级别处理一次。每个创建的游戏都会自动创建一个作业。
此外,如果不需要 referees
,您可以将 optional: true
标志传递给 assignment
模型中的 belongs_to
。这样您就可以安全地创建游戏。因为目前尚不清楚您是如何从中获取裁判详细信息的。