阅读Hartl的教程,在microposts Controller 中的 list 10.42 中,我们有
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
所以在
else
分支中,我们需要放入空的@feed_items
,因为渲染本身不提供变量。
我的问题是-为什么不像这样使用
redirect_to root_url
在if
分支中,该变量将由 Controller Action 提供吗? 最佳答案
如果@micropost.save
返回false
,则表示您的@micropost
无效。换句话说:您有验证错误。可以通过@micropost.errors
访问这些错误。您应该在 View 中显示它们,以便用户知道他做错了什么。如果您重定向,它将是一个全新的请求,并且@micropost.errors
将不再可用。这就是为什么他使用渲染。
这样做的另一方面是,您将需要使用用户输入的值来重新填充表单。如果重定向,这些值也将消失。要通过重定向保留错误和发布的值,您必须将其保存在 session 或其他内容中。仅渲染 View 要容易得多。
关于ruby-on-rails - redirect_to与渲染-Michael Hartl的教程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25308572/