2010-04-28 101 views
0

我在Rails食譜中找到了這段代碼。如何在渲染模板時使用字符串插值?

class BlogController < ApplicationController 

def display_by_date 
year = params[:year] 
month = params[:month] 
day = params[:day] 
day ='0'+day if day && day.size == 1 
@day = day 
if (year && month && day) 
    render(:template => "blog/#{year}/#{month}/#{day}") 
elsif (year) 
    render(:template => "blog/#{year}/list") 
end 
end 

end 

我不知道是什麼來命名模板,以便路由器可以找到它們。謝謝你的幫助。

+0

該代碼看起來老舊可怕。我建議你閱讀一些文檔,並通過一些基本的教程。然後在遇到麻煩時發佈具體問題。 – jdl 2010-04-28 03:09:44

+0

我確實有一個具體的問題,我如何渲染上面引用的模板?換句話說,我需要命名模板以便路由器可以找到它們。 – 2010-04-28 03:56:41

+0

http://stackoverflow.com/questions/2726525/group-and-sort-blog-posts-by-date-in-rails可能的重複 – 2010-04-28 08:11:53

回答

1

我可以想象這裏發生了什麼事,但我認爲代碼示例基於多種原因。首先,渲染調用(:template)不會被路由,因爲它們實際上是文件路徑。這可能是做什麼拉入預渲染的頁面,並將它們包裝在應用程序佈局中作爲某種基本的緩存。目前尚不清楚首先產生這些緩存文件的是什麼。

你需要有沿線的文件:

app/views/blog/2010/10/20.html.erb 
app/views/blog/2010/list.html.erb 

路線是什麼委派請求到相應的控制器動作,所以這些都是沿着此線可能的東西:

map.connect '/blog/:year/list', :controller => 'blog', :action => 'display_by_date' 
map.connect '/blog/:year/:month/:day', :controller => 'blog', :action => 'display_by_date' 

你應該做什麼而不是這種模板緩存委託是利用Rails.cache機制,它支持許多方式來保存部分結果,包括文件,但有一個更合理的方式來生成和過期它們。

作爲一個說明,這是一些糟糕的格式化代碼。通常情況下,您可以使用以下簡單方法格式化參數:

render(:template => "blog/%04d/%02d/%02d" % [ params[:year].to_i, params[:month].to_i, params[:day].to_i ]) 

這將根據需要填充零。這比檢查字符串的長度要穩健得多,如果它只有一個,那麼就加上一個零,而且它的優點是隻有一行,它將格式和模板定義爲一行。