ActionController :: ParameterMissing в / posts параметр отсутствует или значение пустое: запись на рельсы 5.2

Я добавил фрагмент с некоторыми комментариями, в основном вам нужно прочитать текущую позицию курсора и разрезать символ в заданной позиции. Если вы не хотите потерять фокус на элементе ввода, вам просто нужно снова вызвать 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">&larr; DELETE</a>

0
задан loba 19 January 2019 в 23:07
поделиться

1 ответ

Удалить 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.

0
ответ дан Tom 19 January 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: