HTML-идентификатор должен быть уникальным на странице, поэтому вы не можете использовать уникальный идентификатор для повторяющегося поля. Хотя страница может отображаться правильно, при публикации формы она будет игнорировать дублирующиеся идентификаторы (и, таким образом, будет публиковать неверную / неполную информацию).
Во-вторых, используя jquery, довольно просто найти ближайший элемент.
Так что в вашем пароле для вложенных полей удалите все идентификаторы, поэтому напишите что-то вроде
<%= form.input :images, label: false, as: :file,
:input_html => { :class => 'custom-file-input', :style=>"cursor: pointer"} %>
<label class="custom-file-label" style="cursor: pointer;">Choose file</label>
И тогда вы можете написать что-то вроде (очевидно, не проверено)
$(".nested-fields .custom-file-input").change(function(){
$(this).siblings("label.custom-file-label").text(this.files[0].name);
});
Есть несколько вариантов, и я не уверен, какой селектор работает лучше всего. Вы можете подняться, а затем выбрать правильный ярлык:
$(this).closest('.nested-fields').find('label.custom-file-label')
Я не уверен, сработает ли просто поиск ярлыка closest
?
$(this).closest('label.custom-file-label')
Или, как я делал выше, найдите sibling
с правильным селектором.