2010-08-02 63 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