2010-08-02 53 views
2

这里的一个rails新手导轨重用视图模板

我在我的控制器中有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 

我必须修改我的索引视图包含谐音是
一)使头
b)将@结果 并重用它们? 即使index.html.erb和refine_existing.html.erb看起来完全一样

有没有什么办法可以在我的refine_existing动作中使用index.erb视图?

在此先感谢

+1

'#index.html.erb'只是一个注释,供您查看。我不喜欢它,因为剪切粘贴常见的'respond_to do ... end'块可能会带来错误的文件名和'format.html'。如果'index'和'refine_existing'将是相同的,也许你可以从一个到另一个重定向。 – sarnold 2010-08-03 00:00:45

+0

重定向到索引的问题是它重新执行代码以在索引中获取@results并覆盖refine_existing中的记录。 – truthSeekr 2010-08-03 06:36:19

回答

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 - 如果您已根据需要自定义路径进行调整。

+0

这很好。谢谢。 – truthSeekr 2010-08-03 06:43:19