2016-09-28 4 views
0

私はRails 4.2.3でアプリケーションを作成しました 私はデータベースをシードしようとしていますが、rake db:migrateを実行した後にデータベースのフィールドにnil値表。私は私のseeds.rbを持っているコードの唯一の作品は次のとおりです。Rails - 値の代わりにnilでシードする

私は私のschema.rbで
User.create![{username: "test", password_digest: "test"}] 

create_table "users", force: :cascade do |t| 
     t.string "username" 
     t.string "password_digest" 
     t.datetime "created_at",  null: false 
     t.datetime "updated_at",  null: false 
    end 

マイUserモデルは次のとおりです。

 class User < ActiveRecord::Base 
     has_one :profile, dependent: :destroy 
     has_many :todo_lists, dependent: :destroy 
     has_many :todo_items, through: :todo_lists, source: :todo_items 
     end 

ありますherehereのような同じ問題を経験した他の人は、自分のモデルにattr_accessorがないので、私の場合にはこのソリューションが当てはまるとは思えません。

誰かが、なぜそれが起こっているのか知っていますか?

+0

brace-type matter ... use 'User.create!(username: "test"、password_digest: "test") ' –

答えて

1

ブレース-種類の問題では...

これは、ユーザ名「テスト」とパスワード「テスト」

が含まれているハッシュを使用して、単一のユーザーを作成するためにレールを伝える代わりに、次の

User.create!(username: "test", password_digest: "test") 

を使用

あなたが持っているものは、配列を持つユーザを作成するように指示しています。{} ...しかし、createはハッシュの配列を期待していません。

EDIT:RE:あなたは()を使用しますが、[]を使用しないでくださいとき、そしてルビーはあなたが何を意味するかを推測する必要があるため[]

を使用することがありますそれ... メソッドに配列を渡すか、されていますあなたは変数の配列インデックス方法を呼び出すのですか? (または角括弧内の整数でない場合はハッシュ索引付け)?

あなたは右隣の単語create!(例えばUser.create![])ルビーは、おそらく後者のよう...例えばそれはcreate!呼ばUserクラスの変数を探していると解釈...そして見しようとするだろうに[]を置く場合そのハッシュのキーは{username: "test", password_digest: "test"}, {username: "test2", password_digest: "test2"}と呼ばれ、混乱します。なぜなら、配列インデックス方法[]を使用すると、2つではなく1つのキーだけを渡すべきであるからです({username: "test", password_digest: "test"}が最初、{username: "test2", password_digest: "test2"}が2番目です)... 1つではなく2つの引数を渡そうとしているというエラーを出すだけでなく、間違った解釈を使って始めます。

どちらの何をしたいです...

あなたが[]create!その後、ルビーは、メソッドに渡されるパラメータとして[]を解釈する可能性が高い...との間にスペースを入れた場合別のエラーが発生します。

曖昧さをなくすには - 常に空白を使用するか、このようにあいまいな引数を渡すときは括弧()を使用します。

+0

ありがとうTaryn - これは本当に役に立ちます。簡単な質問 - 次のコードを使用して2人のユーザーを作成する例があるので、私が辿っているコースでは混乱しています。 User.create! [{username: "test"、password_digest: "test"}、 {username: "test2"、password_digest: "test2"} ] これは作成時にギャップがある場合に機能します。と配列のオープンが、私にエラー "間違った引数の数(2の1)"がない場合は、ギャップがありません。理由を知っていますか? – IliasP

+0

これで私の答えは更新されますので、ここで書いても時間がかかります; –

+0

ありがとうございます! – IliasP

関連する問題