Я добавил фрагмент с некоторыми комментариями, в основном вам нужно прочитать текущую позицию курсора и разрезать символ в заданной позиции. Если вы не хотите потерять фокус на элементе ввода, вам просто нужно снова вызвать focus()
на входе после изменения его значения:
const deleteBtn = document.querySelector("#delete");
deleteBtn.addEventListener("click", function(event) {
event.preventDefault(); // here we're preventing the original event side-effects
const input = document.querySelector("input[name=name]");
const originalSelectionEnd = input.selectionEnd; // this will store current cursor position in the input field
if (originalSelectionEnd > 0) { // as if we're at the beginning of the input there is nothing to delete
input.value = input.value.slice(0, input.selectionEnd - 1) + input.value.slice(input.selectionEnd); // we're setting new value to the original value without a character before the cursor position
input.selectionEnd = originalSelectionEnd - 1; // setting new cursor position
}
input.focus(); // and finally focus input element
});
<input type="text" name="name" />
<a id="delete">← DELETE</a>
Удалить url: post_path
из вашего form_with
.
form_with
сможет правильно направить форму только с [@post, @post.comments.build]
. Это должно привести к post_comments_path
, но вы переопределяете это к post_path
. Когда форма отправляется, вызывается posts#create
, а params.require(:post)
выдает ошибку, потому что в объекте params нет клавиши post
.
post_comments_path
будет направлен на comments#create
, который должен работать как ожидалось. Вы можете добавить url: post_comments_path
, чтобы быть явным.
Обновление:
NoMethodError
вызвано отсутствием вложенных маршрутов. В настоящее время маршрутизация для комментариев основана на /comments/:id
маршрутах и генерирует comment_path
помощников.
Мы можем использовать вложенные маршруты , чтобы лучше определить наши отношения и сделать наши действия контроллера немного чище. Мы хотим обновить routes.rb
следующим образом:
(у вас также должен быть корневой маршрут вверху файла маршрутов)
Rails.application.routes.draw do
root 'home#index'
resources :posts do
resources :comments
end
end
С комментариями вложенный внутри блока posts Rails создаст вложенные маршруты, похожие на posts/:post_id/comments/:comment_id
и post_comments_path
.