2010-04-28 44 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 ]) 

这将根据需要填充零。这比检查字符串的长度要稳健得多,如果它只有一个,那么就加上一个零,而且它的优点是只有一行,它将格式和模板定义为一行。