render的用法

在 controller 中的用法

在 controller 中用 render 的作用是生成 HTTP Reponse。

在 controller 中,每当执行完一个 action 之后,如果没有定义指向,Rails 会自动到 view 中去找跟该 action 同名的一个模板,比如 index action 就会对应 index.html.erb 模板。

但不是每一个 action 都会有一个相应的模板页面,比如说 create 这个 action,实际上用来创建数据,并没有一个 create.html.erb 的模板在 view 里,所有在 controller 里就需要做一个指向,让 Rails 执行完毕之后,返回一个页面。常用的做法是,当 create 执行成功,就会 redirect_toindex 页面;如果 create 不成功,就回到 nes 页面,这时我们一般用 render :new ,让用户重新填写表单。

在controller 中, render 后面接的可以是 action,比如说

render action: :new

也可以有更多的用法,比如

render text: 'ok'
render json: @users
render xml: @users
render file: 'app/views/users/index'
render partial: 'app/views/users/search'

在同一个 controller 里,只能有一个 render 或者 一个 redirect_to 的请求,否则会发生异常。

在 view 中的用法

在 view 中使用 render 的时候,通常是用作渲染某个视图。

需要注意到的时候,如果是把一个循环中的代码做成一个 partial ,在 render 的时候,需要把相关的变量传递到 partial 里面去,可以使用 locals:

<% @users.each do |user| %>
	<%= render partial: "one_user", locals: { user: user} %>
<% end -%>

像上述的例子,是在遍历输出,rails 对于这种情况还有专门的一个方法,就是 collection,可以写成这样

<%= render partial: "one_user", collection: @users, as: :user %>

假如 @users 有 10条数据,用第一种方法,就会对 one_user 这个 partial 请求 10 次;但如果用第二种方法,就只需要请求一次,效率是更高的。

· rails