В приложении Ruby on Rails я создаю простую форму (form_for
) для отправки текста.Но я хотел бы отобразить обновленный текст на той же странице, поэтому я использую remote: true
(для отправки в виде Ajax).Это работает нормально, если я наберу text_area и нажму кнопку отправки.
Однако я бы хотел немного подправить, я установил для события onkeyup: 'submitIt()'
text_area и определил function submitIt()
под формой.как JQuery ($('#form-id').submit()
).На этот раз форма отправляется после каждого нажатия ключа, НО она отправляется в [text / html] и больше не отвечает на действие update.js.erb.Хотя он обновляет текст, потому что обновление действия в контроллере работает, он просто не отвечает на визуализацию представления так, как я хочу.Это полностью противоречит цели, и я очень разочарован чтением блогов stackoverflow и ruby rails, но безрезультатно.
У кого-нибудь есть предложения?
Моя форма:
<%= form_for @product, remote: true, html: {id: 'edit-form'} do |f| %>
<ul class="errors"> </ul>
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<%= f.label :price %>
<%= f.text_field :price, onkeyup: 'submitIt()' %>
<%= f.submit %>
<% end %>
<script>
function submitIt() {
$("#edit-form").submit();
}
</script>
Теперь я изменяю сценарий следующим образом:
<script>
function submitIt() {
let valuesToSubmit = $('#edit-form').serialize();
$.ajax({
type: 'POST',
url: $('#edit-form').attr('action'),
data: valuesToSubmit,
dataType: "JSON"
}).success(function(json){
console.log("success", json);
});
}
</script>
Когда я печатаю и смотрю на сервер, запрос представляет собой Ajax (JSON), изменение продукта фиксируется, и он отображает update.js.erbс 200OK, (хотя это не выводит сообщение об успехе на консоль).И ничего в представлении не меняется.Если я нажимаю кнопку «Отправить», она проходит в той же последовательности (журнал сервера совпадает с тем, что я ввожу), но фактически меняет представление.Почему?
Вот журнал сервера моего поведения при наборе:
Started PATCH "/products/1" for 127.0.0.1 at 2019-01-20 11:23:59 +0100
Processing by ProductsController#update as JSON
Parameters: {"utf8"=>"✓", "product"=>{"name"=>"Nintendo", "price"=>"203"}, "authenticity_token"=>"vKsD9PcUN0DPLoWn44sYHZ6Fo0iB32u5nXyEmEw/WrYfiUC4qpKxTHWupdT8iMzHF5ji4CbWwVh7FrkxNJMFKQ==", "id"=>"1"}
Product Load (2.4ms) SELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/products_controller.rb:21
(1.1ms) begin transaction
↳ app/controllers/products_controller.rb:22
Product Update (18.6ms) UPDATE "products" SET "price" = ?, "updated_at" = ? WHERE "products"."id" = ? [["price", 203.0], ["updated_at", "2019-01-20 10:23:59.220778"], ["id", 1]]
↳ app/controllers/products_controller.rb:22
(105.2ms) commit transaction
↳ app/controllers/products_controller.rb:22
Rendering products/update.js.erb
Product Load (10.1ms) SELECT "products".* FROM "products"
↳ app/views/products/_index.html.erb:1
Rendered products/_index.html.erb (134.5ms)
Rendered products/update.js.erb (161.3ms)
Completed 200 OK in 494ms (Views: 196.0ms | ActiveRecord: 137.5ms)
Вот тот, где я нажимаю кнопку:
Started PATCH "/products/1" for 127.0.0.1 at 2019-01-20 11:22:46 +0100
Processing by ProductsController#update as JS
Parameters: {"utf8"=>"✓", "product"=>{"name"=>"Nintendo", "price"=>"20"}, "authenticity_token"=>"vKsD9PcUN0DPLoWn44sYHZ6Fo0iB32u5nXyEmEw/WrYfiUC4qpKxTHWupdT8iMzHF5ji4CbWwVh7FrkxNJMFKQ==", "commit"=>"Update Product", "id"=>"1"}
Product Load (2.1ms) SELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/products_controller.rb:21
(1.2ms) begin transaction
↳ app/controllers/products_controller.rb:22
(1.1ms) commit transaction
↳ app/controllers/products_controller.rb:22
Rendering products/update.js.erb
Product Load (2.5ms) SELECT "products".* FROM "products"
↳ app/views/products/_index.html.erb:1
Rendered products/_index.html.erb (135.0ms)
Rendered products/update.js.erb (161.0ms)
Completed 200 OK in 321ms (Views: 197.0ms | ActiveRecord: 6.8ms)
Они одинаковые.
Теперь я создаю черновик приложения для проверки, кнопка отправки работает для создания нового продукта, но не отображает правильное представление для действия обновления.Очень странно.Единственное отличие в журнале сервера - это запросы PATCH и POST.
Gemfile:
...
ruby '2.5.1'
gem 'rails', '~> 5.2.2'
gem 'jquery-rails'
...
Я добавляю это в application.js
//= require jquery