#javascript #ruby-on-rails
Вопрос:
У меня есть следующий код в контроллере и модели. Он предназначен для проверки того, существует ли уже модель, и возврата сообщения об ошибке, если она существует:
Контроллер
def new
@book = Book.new
end
def create
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
redirect_to book_url(@book)
else
@errors = @book.errors.full_messages.first
redirect_to new_book_url(@errors), alert: @errors
end
end
Модель
validate :existing_book, on: :create
def existing_book
existing_book = Book.find_by('author LIKE ? AND publisher LIKE ?', "#{self.author}", "#{self.publisher}")
existing_book ||= Book.find_by(name: self.name, date: self.date)
if existing_book != nil
errors.add(:name, message: ":This book may already exist.")
end
end
Моя проблема в том, что:
После создания книги, которая уже существует, она сначала переходит на экран ошибок rails ( No route matches [GET] "/books/new.Name :This book may already exist."
). Затем, когда я нажимаю кнопку «Назад»в браузере, появляется страница создания книги с сообщением об ошибке внизу: «Название :Эта книга, возможно, уже существует».
Чего бы я хотел, так это:
После создания уже существующей книги экран должен оставаться на странице создания этой книги и отображать всплывающее сообщение. Так что это должно вызвать событие. По крайней мере, он должен оставаться на том же экране и показывать правильное сообщение об ошибке (без «Имени», даже если оно не появится; если я удалю «:имя», я получу эту ошибку: wrong number of arguments (given 0, expected 1..2)
).
Другая проблема в том, что я не понимаю, как это сделать. Я был бы очень признателен вам за помощь.
Комментарии:
1. в вашем вопросе отсутствует код в контроллере и форма, выполняющая создание, без них вам невозможно помочь. это контроллер, который решает, что видит пользователь после отправки.
Ответ №1:
Это неправильно
redirect_to new_book_url(@errors), alert: @errors
Скорее всего, вы просто захотите сделать render :new
это вместо этого (и убедитесь, что вы визуализируете @errors
в этом представлении).
Комментарии:
1. Что касается другого, попробуйте добавить свое сообщение в
:base
вместо:name
2. Спасибо. Когда я пытаюсь ` » отобразить :новый, предупреждение: @ошибки и создать дубликат книги, я получаю точно такую же страницу создания книги. Никаких сообщений об ошибках. Как я могу отобразить сообщение об ошибке и сделать его всплывающим?
3. @superbot: вы должны отобразить ошибки в представлении (обычно это делается в файле макета). Проверить railstutorial.org , это касается этого.