2010-04-28 4 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

+0

У меня есть конкретный вопрос, как мне сделать шаблон, который указан выше? Другими словами, что мне нужно, чтобы назвать шаблоны, чтобы маршрутизатор мог их найти. –

+0

Возможный дубликат http://stackoverflow.com/questions/2726525/group-and-sort-blog-posts-by-date-in-rails –

ответ

1

Я могу себе представить, что здесь происходит, но я думаю, что пример кода отходит от базы по ряду причин. Во-первых, вызовы render (: 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 ]) 

Это поле с нулями, если требуется. Это значительно более устойчиво, чем проверка длины строки и добавление нуля, если она только одна, и имеет преимущество только в одной строке, которая определяет ваш формат и шаблон в одном.

Смежные вопросы