rails重用视图模板

时间:2010-08-02 23:37:36

标签: ruby-on-rails views

这里有铁杆新手

我的控制器中有2个动作1)索引2)refine_existing。 它们都以相同的格式显示结果。 如何重用index.html.erb文件?

当我尝试以下操作时,它会抱怨refine_existing.erb不存在。

def refine_existing
   ...
  respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @results }
end

我的索引操作看起来像这样

def index
 #some logic to get @results
 #set some session variables etc.
 respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @results }
 end
end  

我是否必须重构索引视图以包含部分内容 a)制作标题
b)渲染@results 并重用它们? 即使index.html.erb和refine_existing.html.erb看起来完全相同

我在refine_existing操作中有什么方法可以说使用index.erb视图吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

按照惯例,如果您没有指定模板名称,Rails会查找与该操作匹配的名称。您可以使用所需的模板名称显式调用render来覆盖此设置。唯一的缺点是路径是相对于TEMPLATE_ROOT,通常是app/views

def refine_existing
   ...
  respond_to do |format|
    format.html { render :template => "<table_name>/index.html.erb" }
  end
end

table_name替换为模型的“tablized”形式。例如。如果你的控制器是PostsController,那么posts。因此,您的模板将存在app/views/posts/index.html.erb - 如果您已根据需要以某种方式调整自定义路径。