Вот что я пытаюсь сделать:
- Пользователь вставляет URL.
- В поле ввода, которое пользователь вставляет, есть: onpaste, запускающая функцию urlPasted ().
- Функция urlPasted () отправляет форму, в которой находится поле ввода, которое выполняет вызов AJAXпользовательская функция с именем lookup_profile.
- В контроллере функция lookup_profile выполняет некоторые веб-запросы, а затем обновляет некоторые переменные экземпляра.
- Как только эти переменные обновляются (занимает ~ 5 секунд), представлениеимеет функцию, которая ждет 20 секунд и обновляет текстовые поля на модальной поверхности с результатами этих переменных экземпляра.
Вот что я пока имею в виду:
<%= form_tag url_for(:controller => 'users', :action => 'lookup_profile'), id: "profileLookupForm", :method => 'post', :remote => true, :authenticity_token => true do %>
<div class="form-group row">
<div class="col-sm-12">
<%= text_field_tag "paste_data", nil, onpaste: "profileURLPasted();", class: "form-control"%>
</div>
</div>
<% end %>
<script type="text/javascript">
function profileURLPasted() {
// Once the user pastes data, this is going to submit a POST request to the controller.
setTimeout(function () {
document.getElementById("profileLookupForm").submit();
}, 100);
setTimeout(function () {
prefillForm();
}, 20000);
};
function prefillForm() {
// Replace company details.
$('#companyNameTextBox').val("<%= @company_name %>");
};
</script>
Воткак выглядит контроллер:
def lookup_profile
# bunch of code here
@company_name = "Random"
end
Теперь вот проблема, которая у меня есть.Когда пользователь вставляет данные, он прекрасно передает данные в custom_action lookupProfile.Однако после запуска кода lookupProfile rails не знает, что делать дальше.Я имею в виду, что это дает мне эту ошибку:
Users # lookup_profile отсутствует шаблон для этого формата и варианта запроса.request.formats: ["text / html"] request.variant: []
Когда на самом деле у меня действительно есть файл views/users/lookup_profile.js.erb
.По какой-то причине он пытается отобразить версию HTML.Я не знаю почему.
Во-вторых, я попытался поместить это в контроллер до конца:
respond_to do |format|
format.js { render 'users/lookup_profile'}
end
, но это приводит к этой ошибке:
ActionController::UnknownFormat
Любая помощь будет принята с благодарностью.Я просто хочу, чтобы пользовательская функция запускалась, обновляла переменные экземпляра и позволяла мне обновлять текущую форму этими данными.
Вот еще одна ссылка на stackoverflow для чего-то похожего, что я пытаюсь сделать: Отправка Railsформа через ajax и обновление представления , но этот метод не работает (получение ошибки actioncontroller)
* EDIT 1 *
Хорошо, так что яисправил ошибку ActionController, заменив мой form_tag на:
<%= form_tag(lookup_profile_users_path(format: :js), method: :post, :authenticity_token => true, id: 'profileLookupForm', remote: true) do %>
Но теперь он фактически отображает реальный JavaScript в представлении, и я этого не хочу.Я просто хочу иметь доступ к переменным экземпляра, которые были обновлены в действии lookup_profile, а не отображать представление.
* EDIT 2 *
Так что я думаю, что мойПроблема сводится к следующему: размещение кнопки в форме и отправка из ИТ отличается от моего кода JavaScript, который отправляет форму.Если я смогу выяснить, что с этим, то, думаю, я в хорошей форме.