То, что вы пытаетесь сделать, это просто скопировать значение поля ввода (которое было заполнено другим вашим кодом) в системный буфер обмена. Вам нужно использовать javascript, чтобы сделать это, если у вас есть jquery, это должно сработать.
Для вашего слима вам нужен идентификатор для его нацеливания
a.btn.btn-default id= "copy"
i.fa.fa-clipboard
Попробуйте добавить идентификатор элемента ввода, из которого вы хотите скопировать
= f.input_field :otp_secret, class: 'upcase', id: "secret", readonly: true
Теперь попробуйте изменить это и посмотрите, работает ли.
a.btn.btn-default data-clipboard-action='copy' data-clipboard-target='secret'
i.fa.fa-clipboard
Также где-то в вашем javascript вам нужно будет нацелить событие клипа на что-то вроде этого:
new ClipboardJS('#secret');
См. пример здесь https://jsfiddle.net/ec3ywrzd/
Тогда вам понадобится это javascript для загрузки в ваш html. Но вы должны быть в состоянии нацелить поле шифра, в этом примере я использую id="secret"
. Я не уверен, генерирует ли ваш OTP-код свой собственный идентификатор или сейчас, поэтому вам, возможно, придется проверить своего домохозяйства, чтобы выяснить, как нацелиться на него, чтобы добавить идентификатор. Вы можете попробовать добавить идентификатор здесь:
= f.input_field :otp_secret, class: 'upcase', id: "secret", readonly: true
В противном случае вам придется использовать другие селекторы запросов для его нацеливания. Но вам может вообще не понадобиться буфер обмена js.
Вот пример basi c на jsfiddle , чтобы проверить его, вы можете просто добавить любую строку в поле ввода. Вам нужно будет добавить это в JS файл, который будет загружен вашим макетом просмотра, т.е. application.js
$(document).ready(function() {
$('#copy').click(function(){
$('#secret').select();
document.execCommand('copy');
alert("copied!");
})
})
Вы также можете посмотреть ответы на этот вопрос