나는 지금 당장 느끼는만큼 복잡하지 않아야한다고 생각하는 문제가 있습니다. 상위 폼의 드롭 다운에서 선택한 항목을 기반으로 하위 레코드를 초기화 한 다음 추가 채우기 위해이 하위 항목을 표시합니다 (현재는 항상 2).드롭 다운의 선택에 따라 저장되지 않은 상위 개체의 하위 레코드를 동적으로 초기화합니다.
여기에는 웹과 관련된 몇 가지 주요 해답이 있지만 지금까지는 작동 솔루션을 구축하지 못했습니다.
주요 구성 요소는 다음과 같습니다. 내가
<div class="form-group">
<%= form.label :scenario_id %>
<%= form.collection_select :scenario_id, Scenario.all, :id, :name, {}, { class: "form-control" } %>
</div>
선택이 드롭 다운 메뉴에서 드롭 다운 다음 한 새로운 게임 형태로
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
이 가능한 필터 game_players의 세력 (각 시나리오는 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>
그러나 나는 내가 아약스 호출에 집착하고 있다고 언급했다. 내 컨트롤러 동작이 시작되지 않고 대신 id = prepare_players로 show-action을받습니다. routes.rb
에서 나는 Sebastiáns 조언에 따라 지금 games_controller에서 올바른 행동을 타격하고 같이이
get 'games/prepare_players', to: 'games#prepare_players'
UPDATE 있습니다. 하지만 두려워 하듯이 관련 ID를 모른 채 부모에게 새로운 game_players를 추가 할 수는 없습니다. 부모님이 아직 저장되지 않았기 때문에 이드를 그냥 지나치게 쉽게 전달할 수 있지만 그렇지 않습니다.
현재 Rails 5.1.4를 사용 중입니다.
이 기능을 사용하도록 유도하는 지침은 매우 높이 평가됩니다.
감사합니다. 그것은 저를 한 발 전진 시켰습니다. 나는 그 길의 마지막 하나를 가지고있었습니다. – thepanu
지금 오류가 있습니까? 나는 가치가 무엇인지'@ game'을 정의하는 것이 궁금합니다. –
다음 문제입니다. 나는 새로운 행동을 위해 정의 된 @game에 접근 할 수 없다고 의심했다. 그리고 나는 할 수 없다. – thepanu