Ana*_*and 3 ruby-on-rails rails-activerecord
在我的rails(4.2.1)app中,我有一个Post带整数字段的模型foo.创建帖子时,我将一个字符串传递给整数字段.我期待一个错误,但记录是通过foo设置为创建的nil.为什么我没有收到错误?
# migration
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :name
t.integer :foo
t.timestamps null: false
end
end
end
# post creation, no error ???
Post.create!(name: 'a post', foo: 'a_string')
# post has nil value in foo
Post.first
#=> Post id: 1, name: "a post", foo: nil, ...
Run Code Online (Sandbox Code Playgroud)
实际上,我想为Post编写一个失败的测试,然后我会将foo改为enum以使测试通过.我很惊讶测试没有引起错误.
这是db的"特性".此时Rails不知道属性的类型.如果您希望它只接受整数,您可以使用validates_numericality_of :foo.
如果您希望测试失败而不是枚举,您可以执行类似的操作
expect { subject.foo = 'invalid value' }.to raise_exception(ArgumentError)
这样,只要它不是枚举就会失败.
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |