Это то, что я в настоящее время получаю:Как сохранить идентификатор для обоих вложенных атрибутов?
Started POST "/duels" for 127.0.0.1 at 2016-10-15 02:51:06 -0400
Processing by DuelsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"/vNueb1U+W5asQ4/Vnh5kSdeUc6uiaUKvWG1TIaAKWY0fIM2ovLlsLJUSsmgDG3nTbFgt7n8zSYYT2LkZEqLrA==", "duel"=>{"duelers_attributes"=>{"0"=>{"user_id"=>"2"}, "1"=>{"user_id"=>"15"}}, "consequence"=>"t", "reward"=>"t"}, "dueler"=>{"challenge_id"=>"141"}, "button"=>""}
только один challenge_id
проходит через хотя должно быть два (один для каждого Dueler). Как я могу получить код ниже для вывода чего-то вроде этого на представить:
Started POST "/duels" for 127.0.0.1 at 2016-10-15 03:33:02 -0400
Processing by DuelsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xhbQpHgBmzfuvmYsyZx1Hss8CZBfQQN9+QCEciiq4yUMmT3rZ6eH6QZbIto/6GFoodM46Ug0a1FcLlPaymBB7w==", "duel"=>{"duelers_attributes"=>{"0"=>{"user_id"=>"2", "challenge_id"=>"141"}, "1"=>{"user_id"=>"15", "challenge_id"=>"143"}}, "consequence"=>"t", "reward"=>"t"}, "button"=>""}
duels_controller
def new
@duel = Duel.new
@user = User.find(params[:challenge_daddy])
@duel.duelers << Dueler.new(user_id: current_user.id, user_name: current_user.name, user_last_name: current_user.last_name)
@duel.duelers << Dueler.new(user_id: @user.id, user_name: @user.name, user_last_name: @user.last_name)
@current_user_challenges = current_user.challenges.order(:created_at)
@challenged_user_challenges = @user.challenges.order(:created_at)
respond_with(@duel)
end
поединки/новые
<%= simple_form_for(@duel) do |f| %>
<%= f.fields_for(:duelers) do |dueler| %>
<%= render 'dueler_fields', :f => dueler %>
<% end %>
The loser will <%= f.text_field :consequence %>
<%= f.submit %>
<% end %>
_dueler_fields.html.erb
<%= f.select :user_id, User.order(:name).map { |user| [user.full_name, user.id] }, include_blank: true, id: "change-challenge-options" %>
<div id="current-user-challenges">
<%= f.collection_select :challenge_id, @current_user_challenges, :id, :full_challenge, include_blank: true %>
</div>
<div id="challenged-user-challenges">
<%= f.collection_select :challenge_id, @challenged_user_challenges, :id, :full_challenge, include_blank: true %>
</div>
<script> # If current_user then I show first collection_select otherwise I show second.
var userSelect = $('#change-challenge-options');
var currentUserId = $('#current-user-id').data('user-id');
$('#challenged-user-challenges').hide();
$('#current-user-challenges').hide();
userSelect.on('change', function() {
if (userSelect.val() == "0"){
$('#current-user-challenges').hide();
$('#challenged-user-challenges').hide();
}
else if (userSelect.val() == currentUserId) {
$('#current-user-challenges').show();
$('#challenged-user-challenges').hide();
} else {
$('#challenged-user-challenges').show();
$('#current-user-challenges').hide();
}
});
</script>
Я думаю, вам следует избавиться от этих JS и попробовать по-другому, например, поменять выбор, сделать аякс-вызов и получить данные и заполнить параметры выбора. Возможно, вы можете найти лучший способ, но, увидев, что JS чувствует, что вы создаете 2 варианта с тем же идентификатором, который не является стандартом HTML, и снова вы просто скрываете один из этих избранных, но скрытых полей по-прежнему отправляют свои данные при отправке формы. – Sajan
Жаль, что я не очень хорошо разбираюсь в JS, как вы можете сказать @sajan. Не могли бы вы дать ответ своим предложением? Пожалуйста, умоляю вас, сэр! –
Вы можете попробовать сначала, чтобы подтвердить это, это проблема JS. Удалите блок 'script' и' current-user-problems' div и попытайтесь отправить данные с этим и посмотрите, получаете ли вы 'params', как вы упомянули в вопросе. Если вам удалось получить параметры этого формата, мы можем увидеть о JS – Sajan