通过rspec(我正在使用rspec-1.3.0,rspec-rails-1.3.2 gems)生成器(ruby script/generate rspec_model suggestion section_id:integer user_id:integer subject:string content:text state:string type:string
)我创建了模型和模型规范并运行rake db:migrate and rake:test:prepare
之后我开始研究我的模型规范:
require 'spec_helper'
describe Suggestion do
before(:each) do
@valid_attributes = {
:section_id => 1,
:user_id => 1,
:subject => 'Inappropriate title',
:content => 'The title of this section is inappropriate.',
:state => 'new',
:type => 'flag'
}
end
it "should create a new instance given valid attributes" do
Suggestion.create!(@valid_attributes)
end
it "should reject empty section_id attribute" do
empty_section_id_suggestion = Suggestion.new(@valid_attributes.merge(:section_id => ""))
empty_section_id_suggestion.should_not be_valid
end
...
除了第一次"should create a new instance given valid attributes"
测试外,我创建了6个测试,基本上建议模型的每个测试属性都是空的 - 几乎与"should reject empty section_id attribute"
示例完全相同。
当我运行测试时,我得到了6次失败的测试,这很好。第一次测试"should create a new instance given valid attributes"
通过。
现在,当我转到建议模型并添加validates_presence_of :all
时,我收到以下与第一次测试相关的错误消息:
ActiveRecord::RecordInvalid in 'Suggestion should create a new instance given valid attributes'
Validation failed: All can't be blank
./spec/models/suggestion_spec.rb:16:
当我尝试单独运行测试(validates_presence_of :attribute
)时,所有测试都通过,只有:type
属性我再次收到类似的错误消息:
ActiveRecord::RecordInvalid in 'Suggestion should create a new instance given valid attributes'
Validation failed: Type can't be blank
./spec/models/suggestion_spec.rb:16:
之前我没有遇到过这个问题(有多个相似的模型及其规格正确传递)。看起来它有:type属性的问题(它说它不能为空),即使我通过@valid_attributes
传递值。我尝试过谷歌搜索,但没有找到类似的问题/解决方案。
以下是测试:type属性
it "should reject empty type attribute" do
empty_type_suggestion = Suggestion.new(@valid_attributes.merge(:type => ""))
empty_type_suggestion.should_not be_valid
end
请检查一下,让我知道我在这里做错了什么。
非常感谢您的帮助
彼得
答案 0 :(得分:1)
在您的模型中,您只能说验证:所有因为:所有都不是列名。
class Suggestion < AR::Base
validates_pressence_of :subject, :content
end
没有理由验证id列的存在,但我想如果你愿意的话可以。
api文档: http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
答案 1 :(得分:1)
所以最后我找到了与:type
属性相关的问题的答案:
http://www.gyrotechie.com/2008/09/activerecord-does-not-like-attributes-called-type/
问题是类型是从ActiveRecord继承的类的保留字段名称。
我通过迁移重命名了字段名称并修改了所有相关文件,现在所有文件都正常运行。