Как установить значение по умолчанию для столбца даты и времени для записи времени создания в миграции?

Чтобы продолжить ответ Яна Кемпа , в котором используется 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

105
задан iconoclast 11 January 2019 в 01:28
поделиться

2 ответа

Active Record автоматически ставит отметки времени для операций создания и обновления, если таблица имеет поля с именами created_at / created_on или updated_at / ] updated_on . Источник - api.rubyonrails.org

Вам не нужно ничего делать, кроме этой колонки.

12
ответ дан 24 November 2019 в 03:55
поделиться

Вы можете добавить функцию в модель, подобную этой:

  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');

но я думаю что это не то, что вам нужно.

115
ответ дан 24 November 2019 в 03:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: