私は現時点で私には感じるほど複雑ではないと感じる問題があります。私は、親フォームのドロップダウンで選択した内容に基づいて子レコードを初期化し、次にこれらの子を(現時点では常に2)表示して、さらに充填したいと考えています。ドロップダウンの選択に基づいて未保存の親オブジェクトの子レコードを動的に初期化します
ここにはいくつかの関連性の高い回答がありますが、これまでのところ私は解決策を構築できませんでした。
主要ビルディングブロックは以下のとおりです。フォームで
game.rb
(親)
class Game < ApplicationRecord
has_many :game_players, dependent: :destroy
belongs_to :scenario
accepts_nested_attributes_for :game_players
end
game_player.rb
(子供)
class GamePlayer < ApplicationRecord
belongs_to :game
belongs_to :user
belongs_to :force
end
新しいゲームのための私は、このドロップダウンリストから、ドロップダウン
<div class="form-group">
<%= form.label :scenario_id %>
<%= form.collection_select :scenario_id, Scenario.all, :id, :name, {}, { class: "form-control" } %>
</div>
選択し、次のしている可能性をフィルタリングgame_playersのための力(各シナリオには2つのces)。
私はgame.coffee
jQuery ->
scenarios = $('[name*=scenario_id]').html()
$('[name*=scenario_id]').change ->
scenario_id = $('[name*=scenario_id] :selected').val()
params = 'scenario_id=' + scenario_id
$.ajax {
url: "/games/prepare_players",
data: params
success:() ->
}
そして、ここで私は立ち往生午前中scenario_idをつかみます。私が読んだことに基づいて、私はgames_controller.rb
でこの行動を起こそうとしています。再び、双方にとって、ユーザーからのプレーヤーを選択することが可能である、両方のプレーヤーのためのフォームを表示する必要がありますどのprepare_players.js.erb
$('[name=player-cards]').html("<%= escape_javascript(render partial: 'players', locals: {form: form}).html_safe %>")
でこれをレンダリングする必要があります
def prepare_players
forces = ScenarioForce.where(scenario_id: params[:scenario_id])
forces.each do |force|
@game.game_players << GamePlayer.new(force_id: force.id)
end
respond_to do |format|
format.js
end
end
。
<div name="player-cards">
<h3>Players</h3>
<% @game.game_players.each do |player| %>
<p><%= player.force.name %></p>
<%= form.fields_for player do |pf| %>
<div class="form-group">
<%= pf.label :name %>
<%= pf.collection_select :user_id, User.all, :id, :full_name, {}, {class: "form-control"} %>
</div>
<% end %>
<% end %>
</div>
しかし、私が言及したように、私はAjaxコールに固執しています。私のコントローラーアクションは起動せず、代わりにid = prepare_playersでshow-actionを取得します。私は今games_controllerで正しい行動を打っていますSEBASTIANSアドバイスを1としてroutes.rb
では、私はこの
get 'games/prepare_players', to: 'games#prepare_players'
UPDATEを持っています。しかし、私が恐れていたように、私は親に新しいgame_playersを追加することはできません。私はちょうどそれを持っていた場合、IDを渡すことは簡単だろうが、親はまだ保存されていないため、私はしません。
私は現時点でRails 5.1.4を使用しています。
これを動作させるための指針は非常に高く評価されています。
ありがとうございます。それが私を一歩前進させました。私はルートの最後のものとしてそれを持っていた。 – thepanu
エラーが発生しましたか?私は何が価値か、あなたが '@ game'をどこで定義するのか疑問に思っていました。 –
それは次の問題です。私は、新しいアクションのために定義された@gameにアクセスすることができないと思っていました。そして私はできません。 – thepanu