У меня есть страница, которая содержит 3 блока, и все данные этих блоков необходимо обновить в одной таблице базы данных, поэтому я использовал для обновления всех из них по одному, используя частичный и пользовательский ajax.
Просмотр кода:
.col-lg-3.col-md-3.col-sm-6.col-xs-6
.box-bar
h5.prodman Short Description
br
btn.btn-primary.btn-lg
= link_to 'Edit', edit_product_path(@product, field: 'sd'), remote: true
.col-lg-3.col-md-3.col-sm-6.col-xs-6
.box-bar
h5.prodman Long Description
br
btn.btn-primary.btn-lg
= link_to 'Edit', edit_product_path(@product, field: 'ld'), remote: true
.col-lg-3.col-md-3.col-sm-6.col-xs-6
.box-bar
h5.prodman T&Cs (General, Privacy, Fair Usage etc)
br
btn.btn-primary.btn-lg
= link_to 'Edit', edit_product_path(@product, field: 'tc'), remote: true
После нажатия на ссылку_всуду загружается все это содержимое:
код edit.js.erb:
<% field_name, field_title = get_field_name_title(params[:field]) %>
$('#dialog h4').html("<i class=' glyphicon glyphicon-pencil'></i> Update <%= field_title %>");
$('.modal-body').html('<%= j render('terms_field_form',{field_name: field_name}) %>');
$('#dialog').modal("show");
$('#dialog').on('shown.bs.modal', function () {
CKEDITOR.replace('<%= "#{field_name}" %>');
});
$(document).on('click', '.update_terms', function () {
$.ajax({
type: 'PATCH',
dataType: 'script',
url: '<%= product_path(@product) %>',
data: {
"authenticity_token": $('input[name=authenticity_token]').val(),
"product": {"<%= field_name %>": $('.terms_content').val()}
}
});
});
Частичный код:
= text_area_tag "#{field_name}".to_sym, @product.send(field_name), class: 'form-control terms_content', id: field_name
= button_tag 'Submit', class: 'btn btn-primary mg-t-20 mg-b-20 mg-r-10 update_terms'
Динамические поля (столбцы и заголовки) код:
def get_field_name_title(field)
return 'short_description', 'Short Description' if field == 'sd'
return 'long_description', 'Lease Terms' if field == 'ld'
return 'terms_and_conditions', 'T&Cs (General, Privacy, Fair Usage etc)' if field == 'tc'
end
Задача
Содержимое ящиков всегда остается неизменным. Значит, я обновляю «Длинное описание», и я обновлю его в БД, но если я попытаюсь обновить любой другой ящик, он снова покажет имя этого ящика (предыдущий, который я обновил).
У меня сложилось впечатление, что при каждом клике и обновлении модальность остается неизменной, а при следующем клике ее добавление с существующим один раз. И это повторяет его до следующего клика. Итак, нажмите 1, в следующий раз я нажму 2, поэтому нажмите 1, нажмите 2. затем в следующий раз я нажал3, так что нажмите1, нажмите2, нажмите3. это проблема.
Таким образом, нет нового свежего события для нового клика.
Есть ли какой-нибудь правильный способ сделать это, если мой процесс отстает от какой-либо функции?