全栈工程师成长记

编程重新定义人生

render在controller和view里的区别及其用法

render是渲染的意思。
在controller里面render渲染的是action。
举例:
def new
@post = Post.new
end

def create
@post = Post.new(post_params)
if@post.save
redirect_to posts_path
else
render :new
end
end
在create aticon里,比如post限制标题不得为空,当发表新post标题为空的时候就会导致创建失败,这时render会重新渲染new action,之前post的其他栏位里已经填入的内容不会被抹掉。如果是用redirect_to则会重新刷新页面,之前已经填入的数据也会被抹掉。

在view里面render在80%的情况下是指渲染partial(15%是collection,5%是layout)。
举例,在app/views/common目录下面有一个_navbar.html.erb
当我们想要在app/views/layouts/application.hmtl.erb里引用navbar的时候,只需要这么写:
<%= render 'common/navbar' %>
这样就可以在全局引用navbar这个partial了。
所有的partial文件名都是以_下划线开头,但render的时候不用加下划线。

PS:在logdown显示代码引用的功能还是没搞懂,按照xdite老师之前提到的方法没有显示成功,这个周一要请假一下其他同学。还有logdown的排版也是个要补的坑。