Как использовать строковую интерполяцию при рендеринге шаблонов? - PullRequest
0 голосов
/ 28 апреля 2010

Я нашел этот код в кулинарной книге 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

Я не уверен, как назвать шаблоны, чтобы маршрутизатор мог их найти. Спасибо за вашу помощь.

1 Ответ

1 голос
/ 28 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...