2011-10-18 17 views
1

私はRailsを学ぶ過程にあり、今夜は面白い問題に遭遇しました。Rails 3 - 外部キー - 文字列とシンボル

私は、外部キーのインデックスが必要になり、移行作成していた:私は「バンドルのexecすくいデシベルを:移行」を実行してしまうたび Migration with Symbol

を、私はこのコンソールのエラーを受け取ります: Migration Error

参照を作成していた前に、のインデックスを作成しようとしていたかのように見えます。です。

私はシンボルに「件名」の参照を変更したときにためであると考えている理由:

Migration with symbol instead of string

は移行が突然予想作品として! enter image description here

これはちょうど私がnewbyですが、文字列よりRubyで実際に高速に処理されているシンボルですか?

ちょうど好奇心 - ありがとう!

答えて

2

これは「高速な」問題ではなく、速度の問題でもありません。移行は一度に1行ずつ順番に実行されます。前に指定した方法では列を正しく作成できなかったため、インデックスを作成する行に達したときに名前が一致しませんでした。

文字列バージョンでは、シンボルを使用するときには、綴り字句 "題名"のように正確に列名を作成しました。subject_idとは対照的です。どちらの方法でも、列が作成されたときとインデックスが作成されたときの間に名前の不一致がありました。

マイグレーションでは常にこのための記号を使用してください。 schema.rbファイルを常にチェックするか、GUIツールを使用してデータベースを参照してください。移行後に、列が期待どおりに作成されていることを確認し、データ型が正しいと確認してください。

+0

コメントありがとうございます。私はrake db:migrate VERSION = 0を実行して元の状態に戻しました(SQLite ManagerのアドインでFFにチェックしました)。次に、マイグレーションファイルのテキストを「件名」ではなく「subject_id」に変更しました。バックアップを移行した後も同じエラーが表示されます。これからは、私はシンボルに固執しますが、それがうまくいかなかった理由を知ってうれしいです。私が読んだことから、「subject_id」は私と同じ結果を与えるはずです:subject。 – PhillipKregg

+0

良い質問です。私はいつも自分でシンボルを使用していますので、わかりません。 – jefflunt