У меня есть ресурс под названием Books. Он правильно указан в ресурсе в файле маршрутов.
У меня есть новое действие, которое дает новый вид стандарту:
@book = Book.new
В модели есть некоторые атрибуты, которые проверяются присутствием, поэтому, если действие сохранения завершится неудачно, будут созданы ошибки.
В моем контроллере:
@book = Book.create
... # some logic
if @book.save
redirect_to(@book)
else
render :new
end
Это довольно стандартный; и обоснование использования render: new - это то, что объект передается обратно в представление и могут быть сообщены ошибки, заполнять записи в форме и т.д.
Это работает, но каждый раз, когда я отправляюсь обратно в форму (через render: new), появляются мои ошибки, но мой URL-адрес - это индекс INDEX, который
/books
Вместо
/books/new
Что именно я начал в первую очередь. Я видел несколько других сообщений об этой проблеме, но ответов нет. Как минимум, можно было бы предположить, что он приземлится на вас /books/create, и у меня также есть файл вида (идентичный новому в этом случае).
Я могу это сделать:
# if the book isn't saved then
flash[:error] = "Errors!"
redirect_to new_book_path
Но тогда данные @book теряются вместе с сообщениями об ошибках, которые являются всей точкой наличия формы и действий и т.д.
Почему рендер: новая посылка меня в/книги, действие моего индекса, когда обычно этот URL-адрес вызывает метод INDEX, в котором перечислены все книги?