2013-01-17 32 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

我收到了:验证失败:单词不能为空 –

相关问题