我有一个叫做图书的资源.它在我的routes文件中正确地列为资源.
我有一个新的动作,它为新的观点提供了标准:
@book = Book.new
在模型上,有一些属性是通过状态验证的,因此如果保存操作失败,将生成错误.
在我的控制器中:
@book = Book.create
... # some logic
if @book.save
redirect_to(@book)
else
render :new
end
这是相当标准的;使用render:new的基本原理是将对象传递回视图,并报告错误、重新填充表单条目等.
这是可行的,除了每次我被发送回表单(通过render:new)时,我的错误都会出现,但我的URL是索引URL,它是
/books
而不是
/books/new
我就是从这里开始的.我已经看过其他几篇关于这个问题的帖子,但都没有答案.至少,我们会假设它会将您置于/books/create,我也有一个视图文件(在本例中与new相同).
我可以做到:
# if the book isn't saved then
flash[:error] = "Errors!"
redirect_to new_book_path
那么,整本书的数据和整本书的数据都丢失了,等等.
为什么是render:new在/books上登陆我的索引操作,而通常URL调用index方法,该方法列出所有的书籍?