2013-01-17 65 views
-1

鑑於此代碼:的ActiveRecord :: RecordInvalid(驗證失敗:Word不能爲空)

class Word < ActiveRecord::Base 
    has_and_belongs_to_many :definitions 
end 

class Definition < ActiveRecord::Base 
    has_and_belongs_to_many :word 
    validates :word, presence: true 
end 

mysql> show columns from definitions_words; 
+---------------+---------+------+-----+---------+-------+ 
| Field   | Type | Null | Key | Default | Extra | 
+---------------+---------+------+-----+---------+-------+ 
| definition_id | int(11) | NO | PRI | NULL |  | 
| word_id  | int(11) | NO | PRI | NULL |  | 
+---------------+---------+------+-----+---------+-------+ 

當我打電話:

word = Word.first 
word.definitions.create! 

我得到:

ActiveRecord::RecordInvalid (Validation failed: Word can't be blank) 
+3

爲什麼你期望它的工作? –

+1

在我看來是好的,應該工作。 –

回答

1

第一次:您在Definition類中的關係是錯誤的。它應該是複數! :字

第二個:驗證也是錯誤的。它也應該是複數形式。例如驗證:單詞

以這種方式,期望名稱單詞的字段不是空白而不是關係。

試着改變你的示例代碼到:

word = Word.first 
definition = Definition.new 
definition.words = [word] 
definition.save 
+0

爲什麼你認爲錯誤的命名約定會導致此驗證錯誤? –

+0

這不是一個錯誤的命名約定。我只是認爲這是拼寫錯誤。這就是爲什麼我建議改變它。 –

+0

我收到了:驗證失敗:單詞不能爲空 –

相關問題