2016-09-28 13 views
0

我在Rails 4.2.3中創建了一個應用程序 我試圖給數據庫添加種子,但是在做了rake db之後:migrate我在數據庫字段中獲取了nil值表。代碼的唯一的一塊,我有我的seeds.rb是:Rails - 用nil而不是值填充數據庫

User.create![{username: "test", password_digest: "test"}] 

在我schema.rb我:

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 

我的用戶模型爲:

 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

括號類型問題...使用User.create!(用戶名:「test」,password_digest:「test」)'代替 –

回答

1

括號類型重要...

使用以下代替

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

這告訴Rails創建一個用戶,使用包含用戶名「測試」和密碼「測試」

哈希

你有什麼是告訴軌道創建一個數組[]用戶包含散列{} ...但創建不期望的散列數組 - 它只是期望一個散列。

編輯:回覆:使用[]

這是因爲當你不使用()但要儘量用[],然後紅寶石要猜你的意思...... 你傳遞一個數組的方法或者你在一個變量上調用數組索引方法? (或散列索引,如果它不是括號中的整數)?

如果你把[]旁邊的字create!(例如User.create![])紅寶石可能會解釋說,因爲後者......如它尋找名爲create!User類的變量...然後嘗試一下對於這個哈希名爲{username: "test", password_digest: "test"}, {username: "test2", password_digest: "test2"}的密鑰然後它會變得困惑,因爲當你使用數組索引方法[]你應該通過它只有一個密鑰找到,而不是兩個({username: "test", password_digest: "test"}是第一個和{username: "test2", password_digest: "test2"}是第二個)...因此給你錯誤的是你正在嘗試傳遞兩個參數而不是一個......但也只是使用錯誤的解釋開始。

這兩者都不是你想要的...

如果離開[]create!然後紅寶石更容易解釋[]作爲參數傳遞給一個方法...然後之間的空間它會觸發不同的錯誤。

要明確 - 始終使用空格...或使用parens ()傳遞可能以這種方式不明確的參數時。

+0

謝謝Taryn--這真的很有幫助。快速問題 - 我很困惑,因爲在我的課程中,我們有一個例子,我們使用下面的代碼創建兩個用戶: User.create! [ {用戶名:「test」,password_digest:「test」}, {用戶名:「test2」,password_digest:「test2」} ] 當它與create!和數組的開放,但它給了我一個錯誤「錯誤的參數數量(2爲1)」,當沒有差距。你知道爲什麼嗎? – IliasP

+0

我會用這個更新我的答案,因爲這裏寫的太長了;) –

+0

非常感謝你! – IliasP

相關問題