2012-04-08 8 views
2

私はRailsとRSpecから始めてFactoryGirlに問題があります。基本的にオブジェクトは属性を受け取らない。FactoryGirlは値の代わりに 'nil'を渡します

モデル/ user.rb

class User < ActiveRecord::Base 

    attr_accessor :name, :email, :show_name, :company, :identity, :password, :phone, :mobile 
    validates_presence_of :name, :show_name, :email, :company, :identity, :password, :phone 
    validates_uniqueness_of :email 

end 

スペック/ factories.rb

FactoryGirl.define do 
    factory :user do 
     name "John Doe" 
     email "[email protected]" 
     show_name "John Doe" 
     company "Company" 
     identity "123.456.789-10" 
     password "abc123" 
     phone "1234-5678" 
     mobile "1234-5678" 
    end 
end 

のRailsコンソール

irb(main):001:0> u = FactoryGirl.create(:user) 
    (0.1ms) BEGIN 
    User Exists (0.3ms) SELECT 1 FROM `users` WHERE `users`.`email` = BINARY '[email protected]' LIMIT 1 
    SQL (0.4ms) INSERT INTO `users` (`company`, `email`, `identity`, `mobile`, `name`, `password`, `phone`, `show_name`) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
Mysql2::Error: Column 'company' cannot be null: INSERT INTO `users` (`company`, `email`, `identity`, `mobile`, `name`, `password`, `phone`, `show_name`) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) 
    (0.1ms) ROLLBACK 
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'company' cannot be null: INSERT INTO `users` (`company`, `email`, `identity`, `mobile`, `name`, `password`, `phone`, `show_name`) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) 

誰かが間違って何を知っていますか?

答えて

1

データベースに保存されている属性にattr_accessorを使用しないでください。アクティブレコードによってこれらのアクセサーが生成されます。 attr_accessorを使用すると、アクティブレコードがそれらの値を見つける予定の値を格納していないアクセサで上書きされます。

2

私はあなたが多分

attr_accessibleは、質量割り当てのためにフィールドをホワイトリストに登録するレール機能でattr_accessorないattr_accessible置くことを意味だと思います。 attr_accessorは、物事を妨げるgetterとsetterを生成するためのルビ関数です。

関連する問題