3

这两种形式的“渲染”是否具有相同的效果?

render 'contribute'
render :action => 'contribute'
4

1 回答 1

1

简而言之:是的,它们是相同的。但是,有时传递字符串会导致调用render :fileor render :template

这是渲染函数的 API 文档

如果我们向下滚动并单击“显示源代码”,我们可以看到它在幕后所做的事情。

注意从第 872 行开始的块:

872:         elsif options.is_a?(String) || options.is_a?(Symbol)
873:           case options.to_s.index('/')
874:           when 0
875:             extra_options[:file] = options
876:           when nil
877:             extra_options[:action] = options
878:           else
879:             extra_options[:template] = options
880:           end

通过查看这段代码,我们可以确定它正在尝试变得聪明。

  • 如果字符串以/, (when 0大小写)开头,那么它将调用render :file
  • 如果字符串根本不包含 a /, ( when nilcase) 那么它将调用render :action
  • /如果字符串在字符串的中间或结尾(然后是大小写)的某处包含a else,那么它将调用render :template

希望这能令人满意地回答您的问题:-)

于 2009-06-08T21:46:12.463 回答