开发者

Nested objects and validates_presence_of

开发者 https://www.devze.com 2022-12-08 18:47 出处:网络
I have a nested object that is a type of User (s开发者_如何转开发ay Sub).I had assumed when saving Sub the User validations would be run as well, but apparently not?How would I run all validations in

I have a nested object that is a type of User (s开发者_如何转开发ay Sub). I had assumed when saving Sub the User validations would be run as well, but apparently not? How would I run all validations in User when creating Sub?


The validations do run from the inherited model.

Here's a test case showing that it works.

Test case migration:

class CreateUser < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :name,:string
      t.column :email, :string
      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

Test Models:

class User < ActiveRecord::Base
  validates_presence_of :name
end

class Sub < User
  validates_presence_of :email
end

Tests Cases:

Creating a sub without either a name or email, save should fail with name,email can't be blank

>> b = Sub.create()
=> #<Sub id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>
>> b.save
=> false
>> b.errors
=> #<ActiveRecord::Errors:0x2457458 @errors={"name"=>["can't be blank"], "email"=>["can't be blank"]}, @base=#<Sub id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>>

Creating a sub with no email, save should fail with email can't be blank.

>> b = Sub.create(:name=>'test')
=> #<Sub id: nil, name: "test", email: nil, created_at: nil, updated_at: nil>
>> b.save
=> false
>> b.errors
=> #<ActiveRecord::Errors:0x243865c @errors={"email"=>["can't be blank"]}, @base=#<Sub id: nil, name: "test", email: nil, created_at: nil, updated_at: nil>>

Creating a sub with no name, save should fail with name can't be blank.

>> b = Sub.create(:email=>'test')
=> #<Sub id: nil, name: nil, email: "test", created_at: nil, updated_at: nil>
>> b.save
=> false
>> b.errors
=> #<ActiveRecord::Errors:0x2429594 @errors={"name"=>["can't be blank"]}, @base=#<Sub id: nil, name: nil, email: "test", created_at: nil, updated_at: nil>>

Creating a sub with name and email, save should succeed.

>> b = Sub.create(:email=>'test',:name=>'test')
=> #<Sub id: 4, name: "test", email: "test", created_at: "2009-10-15 22:27:53", updated_at: "2009-10-15 22:27:53">
>> b.save
=> true
0

精彩评论

暂无评论...
验证码 换一张
取 消