2011-01-23 12 views
2

UPDATE:私はデシベルで私のcreates_coves.rbファイルに意味/移行、ではない私は私のseed.rbファイルでRailsのseed.rbファイル内の文字列の長さを制限することはできますか?

をseeds.rb:私はrake db:migrateを実行した後、私はまだだ

class CreateCoves < ActiveRecord::Migration 
    def self.up 
    create_table :coves do |t| 
     t.string :title, :limit=>9,:null =>false 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :coves 
    end 
end 

9文字以上のタイトルを持つ新しいオブジェクトを作成することができ、空の文字も作成できます。なぜ限界やヌルが働いていないのですか?

+0

どのデータベースバックエンドですか?私は、SQLite3は長さの制限や非NULLの強制を邪魔しないと思う、それはSQLite3のような気がしない。 :)(それは任意のタイプの任意のオブジェクトを任意の列に埋め込むことができます。) – sarnold

+0

私は、それかもしれません。私はsqlite3を使用しています – John

答えて

1

あなたが検証を使用する必要があります...別のノートで

Rails 3 Validations

# model.rb 
validates :field, :presence => true, :length => {:minimum => 1, :maximum => 9} 

、なぜあなたはこのためにseeds.rbを使用していますか?これは移行です

+0

私の間違いは、私はcreate_coves.rbファイルであり、seeds.rbではありません。したがって、model.rbのvalidate行がなければ、データベースは9より長い文字列を受け取りますか? – John

+0

または検証をバイパスした場合...直接データベースの挿入と同様(ActiveRecord :: Base.execute "...")自分で試すことができます。これはDATABASEの検証ではなく、APPLICATIONの検証であることに注意してください。 – sethvargo

+0

直接データベースの挿入は、列の長さ制限をバイパスしないでください。 – ClosureCowboy