У нас есть приложение, в котором много моделей, две из них ведут себя странно (Candidate и MarketSegment).
Каждая сущность класса Candidate содержит атрибут market_segment_id. У нас также есть форма, которая позволяет нам редактировать экземпляр Candidate и отправлять / обновлять через JSON-запрос.
Когда я пытаюсь визуализировать партиал, который создает коллекцию радиокнопок с опциями сегмента рынка, которые будут выбраны для этого кандидата в форме редактирования, я всегда получаю последнее значение / market_segment_id списка радиокнопок в хэше params , то есть market_segment_id => '35' каждый раз.
Мы уже пробовали много разных подходов, в том числе:
1) Проверен html, чтобы подтвердить, генерирует ли помощник collection_radio_buttons правильные значения для каждой кнопки;
2) Встроенный цикл для создания каждой радио-кнопки с соответствующими атрибутами вручную.
<%= render partial: 'shared/forms/market_segments_select', locals: {f: f} %>
ruby / erb частичный контент, который генерирует список переключателей
<div class="w-100 h4 overflow-scroll overflow-x-hidden bn pt3">
<%= f.collection_radio_buttons :market_segment_id, MarketSegment.all, :id, :description_pt do |m| %>
<div class="w-100 mb2 market_segment__radio-group">
<%= m.radio_button %>
<%= m.label %>
</div>
<% end %>
</div>
HTML, сгенерированный частичным
<div class="w-100 h4 overflow-scroll overflow-x-hidden bn pt3">
<input type="hidden" name="candidate[market_segment_id]" value="" />
<div class="w-100 mb2 market_segment__radio-group">
<input type="radio" value="1" name="candidate[market_segment_id]" id="candidate_market_segment_id_1" />
<label for="candidate_market_segment_id_1">Agronegócio e Bioenergia</label>
</div>
<div class="w-100 mb2 market_segment__radio-group">
<input type="radio" value="2" name="candidate[market_segment_id]" id="candidate_market_segment_id_2" />
<label for="candidate_market_segment_id_2">Alimentos</label>
</div>
<div class="w-100 mb2 market_segment__radio-group">
<input type="radio" value="3" name="candidate[market_segment_id]" id="candidate_market_segment_id_3" />
<label for="candidate_market_segment_id_3">Auditoria</label>
</div>
...and so on until market_segment_id = 35
Титулы
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Sgpo39Lo...==", "candidate"=>{"avatar"=>"", ..., "market_segment_id"=>"35", ...}, "commit"=>"Atualizar", "id"=>"8"}
действие контроллера
def update
respond_to do |format|
if @candidate.update(candidate_params)
create_candidate_skill_tags
format.html do
redirect_to admin_candidate_path(@candidate),
notice: 'Candidato atualizado com sucesso'
end
format.json { render json: @candidate, status: :ok }
else
format.html { render :edit }
format.json do
render json: @candidate.errors, status: :unprocessable_entity
end
end
end
end
Независимо от переключателя, который я выбираю, параметры всегда получают market_segment_id => '35' (это последняя запись таблицы MarketSegment.