Чтобы продолжить ответ Яна Кемпа , в котором используется LastWriteTime
рассматриваемой таблицы стилей, я написал помощник MVC для вывода тега со встроенным параметром очистки кэша.
Код
public static class CssLinkHelper
{
public static IHtmlString StyleSheet(this HtmlHelper helper, string stylesheetname)
{
// define the virtual path to the css file (see note below)
var virtualpath = "~/" + stylesheetname;
// get the real path to the css file
var realpath = HostingEnvironment.MapPath(virtualpath);
// get the file info of the css file
var fileinfo = new FileInfo(realpath);
// create a full (virtual) path to the css file including a cache busting parameter (e.g. /main.css?12345678)
var outputpath = VirtualPathUtility.ToAbsolute(virtualpath) + "?" + fileinfo.LastWriteTime.ToFileTime();
// define the link tag for the style sheet
var tagdefinition = string.Format("", outputpath);
// return html string of the tag
return new HtmlString(tagdefinition);
}
}
Использование
@Html.StyleSheet("main.css")
Выход
Заметка
Если вас интересует часть var virtualpath = "/~" + ...
и вы думаете, почему бы просто не передать ее как "~/main.css"
? Я реализовал эту функцию таким образом, потому что все мои CSS-файлы находятся в общей папке (/ assets), и помощник будет префикс моего вывода с общим именем папки, т.е. /assets/main.css?131393346850223541
Active Record автоматически ставит отметки времени для операций создания и обновления, если таблица имеет поля с именами
created_at
/created_on
илиupdated_at
/] updated_on
. Источник - api.rubyonrails.org
Вам не нужно ничего делать, кроме этой колонки.
Вы можете добавить функцию в модель, подобную этой:
before_create :set_foo_to_now
def set_foo_to_now
self.foo = Time.now
end
Чтобы модель установила текущее время в модели.
Вы также можете поместить некоторый sql-код в миграцию для установки значения по умолчанию на уровне базы данных, например:
execute 'alter table foo alter column starts_at set default now()'
Установка чего-то вроде этого:
create_table :foo do |t|
t.datetime :starts_at, :null => false, :default => Time.now
end
вызывает выполнение функции Time.now во время миграции, поэтому таблица в базе данных создается следующим образом:
create table foo ( starts_at timestamp not null default '2009-01-01 00:00:00');
но я думаю что это не то, что вам нужно.