2

RailsとRSpecから始めて、FactoryGirlに問題があります。基本的に、オブジェクトは属性を受け取りません。

model / 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

spec / factorys.rb

FactoryGirl.define do
    factory :user do
        name "John Doe"
        email "john@example.org"
        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 'john@example.org' 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)

誰かが何が悪いのか知っていますか?

4

2 に答える 2

2

attr_accessor ではなく attr_accessible を配置することを意味していると思います

attr_accessible は、一括割り当てのためにフィールドをホワイトリストに登録するための Rails 関数です。attr_accessor は干渉する getter と setter を生成する ruby​​ 関数です。

于 2012-04-08T23:26:42.730 に答える
1

attr_accessorデータベースに保存される属性には使用しないでください。Active Record はこれらのアクセサーを生成します。を使用attr_accessorすることで、Active Record が期待する場所に値を格納しないアクセサーでこれらのアクセサーを上書きします。

于 2012-04-08T18:15:47.080 に答える