相关疑难解决方法(0)

Rails:如何验证某些东西是否为布尔值?

rails是否有像validates_numericality_ofboolean 那样的验证器,还是需要自己滚动?

validation ruby-on-rails

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

验证Rspec和Rails中的布尔值

我很困惑如何验证Rspec和Rails中的布尔值.我理解除Ruby 之外的所有内容,false并将nil其视为trueRuby.但是当我使用MySQL和Rails时,它使用1for true0for false(如果我的理解是正确的).

我有以下型号规格.我想测试superuser属性的布尔值.

  • 我怎么在这里写规格?
  • 我如何在这里编写实现代码?
  • 我的规范和实现代码是否特定于特定数据库(如MySQL和PostgreSQL)?

    require 'spec_helper'
    describe User do
      before(:each) do
        @valid_attributes = {
          :username => "mike",
          :password => "super_encryped_password",
          :email => "mike@example.com",
          :superuser => true
        }  
      end
    
      it "should create a new instance given valid attributes" do
        User.create!(@valid_attributes)
      end
    
      it "should have true or false for superuser" do
        @valid_attributes[:superuser] = "hello"
        User.new(@valid_attributes).should have(1).error_on(:superuser)
      end
    end
    
    Run Code Online (Sandbox Code Playgroud)

activerecord rspec ruby-on-rails

9
推荐指数
2
解决办法
6318
查看次数

validates_inclusion_of :in => [true, false] 允许字符串和 Fixnums

我的模型中有此验证:

validates_inclusion_of :imported, :in => [true, false]
Run Code Online (Sandbox Code Playgroud)

但仍然允许字符串和 Fixnums。这个 Shoulda 宏返回 2 个失败:

should_not_allow_values_for :imported, "blah", 42
Run Code Online (Sandbox Code Playgroud)

我已经通过在测试中执行此操作来检查宏没有错:

@item.imported = 42
assert !@item.save
Run Code Online (Sandbox Code Playgroud)

我得到了这个失败:

<false> is not true.
Run Code Online (Sandbox Code Playgroud)

这是 schema.rb 中的相关行:

t.boolean  "imported"
Run Code Online (Sandbox Code Playgroud)

validation boolean ruby-on-rails

3
推荐指数
1
解决办法
3088
查看次数

验证Rails ActiveRecord中的布尔字段

我需要验证Rails ActiveRecord对象的布尔字段.我用这个问题的常见解决方案:

validates :boolean_field, :inclusion => { :in => [true, false] }
Run Code Online (Sandbox Code Playgroud)

但是虽然这个解决方案解决了验证false值的问题,但它仍然允许将字符串保存到boolean_field:

my_object.boolean_field = "string"
my_object.save # => true
my_object.boolean_field # => false
Run Code Online (Sandbox Code Playgroud)

如果我将包含指定为[true, false]?为什么会发生这种情况?更重要的是,我如何验证真值和假值?

PS如果这个问题很重要,我正在使用PostgreSQL.

ruby-on-rails rails-activerecord

3
推荐指数
1
解决办法
3933
查看次数