私は Rails を学ぼうとしていますが、ちょっとした問題に遭遇しました。
古い sqlite3 データベースがあり、Accounts
GUI プログラムで以前に作成したテーブルがあります。データベースの移行でそのテーブルを再作成できるかどうかを確認したいと思います。
これが私が以前に持っていたものの説明です(私の目標):
-- desired
CREATE TABLE "accounts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL DEFAULT (0),
"username" TEXT NOT NULL COLLATE NOCASE,
"password_hash" BLOB NOT NULL,
"creation_time" INTEGER NOT NULL DEFAULT(strftime('%s', 'now')),
"expiration_time" INTEGER NOT NULL DEFAULT(strftime('%s', 'now') + 2592000)
)
現在の移行コードが正しく機能しません。ActiveRecordがカプセル化できないものを指定するために使用できる場所を読み:options
ましたが、おそらく間違っています。を使用する:default => Time.now.to_i
と、いくつかのデフォルト値がハードコーディングされました。を使用したときは:default => "strftime('%s', 'now')"
、まったく機能しませんでした。
class CreateAccounts < ActiveRecord::Migration
def change
create_table :accounts do |t|
t.column 'username', :text, :null => false, :options => 'COLLATE NOCASE'
t.column 'password_hash', :binary, :null => false
t.column 'creation_time', :integer, :null => false, :options => "DEFAULT(strftime('%s', 'now'))"
t.column 'expiration_time', :integer, :null => false, :options => "DEFAULT(strftime('%s', 'now') + 2592000)"
end
end
end
私は次の表で終わります。すべての:option
値が無視されたようです。
-- what i actually get
CREATE TABLE "accounts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"username" text NOT NULL,
"password_hash" blob NOT NULL,
"creation_time" integer NOT NULL,
"expiration_time" integer NOT NULL
)
列を作成するときに SQL を指定するにはどうすればよいですか? どんな助けでも大歓迎です。