小编Rom*_*man的帖子

validates_uniqueness_of传递nil或空白(不带allow_nil和allow_blank)

ActiveRecord的唯一性验证器有一个选项,如果值为nil或空白,则跳过验证.即使我将两个参数都设置为true(默认行为),我也可以在验证命中之前创建一个nil和空白的记录.我使用默认的SQlite3数据库sqlite3-ruby(1.2.5).

编辑以澄清:如果我添加validates_presence_of到模型,我会得到预期的结果.我认为默认行为validates_uniqueness_of会使这个多余.

测试用例:

rails validation_test
cd validation_test/
script/generate Model Thing identification:string
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

app/models/thing.rb的内容:

class Thing < ActiveRecord::Base
  validates_uniqueness_of :identification
end
Run Code Online (Sandbox Code Playgroud)

Rails控制台:

script/console 
Loading development environment (Rails 2.3.4)
>> Thing.create!
=> #<Thing id: 1, identification: nil, created_at: "2009-09-26 01:49:32", updated_at: "2009-09-26 01:49:32">
>> Thing.create! :identification => ""
=> #<Thing id: 2, identification: "", created_at: "2009-09-26 01:49:42", updated_at: "2009-09-26 01:49:42">
>> Thing.create! :identification => ""
ActiveRecord::RecordInvalid: Validation failed: Identification has already been taken
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1090:in `save_without_dirty!' …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails validates-uniqueness-of

61
推荐指数
2
解决办法
4万
查看次数

用于测试验证错误的简单语法

我正在寻找干净和简短的代码来测试Rails Unittests中的验证.

目前我做的是这样的

test "create thing without name" do
    assert_raise ActiveRecord::RecordInvalid do
        Thing.create! :param1 => "Something", :param2 => 123
    end
end
Run Code Online (Sandbox Code Playgroud)

我想有更好的方法也显示验证消息?

解:

我目前没有额外框架的解决方案是:

test "create thing without name" do
    thing = Thing.new :param1 => "Something", :param2 => 123
    assert thing.invalid?
    assert thing.errors.on(:name).any?
end
Run Code Online (Sandbox Code Playgroud)

validation unit-testing ruby-on-rails

8
推荐指数
1
解决办法
6722
查看次数

可扩展的自托管文件上传到Ruby on Rails

我们有一个位于NGINX Server(负载均衡器)后面的Rails 3应用程序(在Passenger上运行).一个主要功能是从浏览器上传文件.什么技术是处理文件上传的好选择?目标不是影响应用程序服务器,并且如果需要可以在多个服务器上进行扩展.Node.js Implementation node-formidable看起来不错.但我更喜欢Ruby实现来保持工具堆的统一.

这些文件预计介于100 KB和100 MB之间.

目前的想法是使用ThinGoliath.但我不确定"非阻塞"是否真的是这里的主要关键.是否可以在我们自己的服务器上部署类似OSS的S3软件?

ruby upload nonblocking

5
推荐指数
1
解决办法
385
查看次数