0

私はモデルを持っています:

class Company < ActiveRecord::Base
  attr_accessible :name, :address, :description, :email, :www   
  validates_presence_of :name, :address, :email
  validates_uniqueness_of :user, :name, :email
  validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
  has_many :items, :dependent => :destroy
  has_one :user  
end

そしてテストケース:

class CompanyTest < ActiveSupport::TestCase
  should_allow_mass_assignment_of :name, :address, :description, :email, :www
  should_have_one :user
  should_have_many :items, :dependent => :destroy
  should_validate_uniqueness_of :name, :email  #failed
  should_validate_presence_of :name, :address, :email  #failed
  should_not_allow_values_for :email, "not valid email"  #failed
  should_allow_values_for :email, "test@test.com"  #failed
end

生成されたテストの一部が奇妙なエラーで失敗します:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: companies.user: SELECT "companies".id FROM "companies" WHERE ("companies"."user" IS NULL)  LIMIT 1

会社テーブルの「ユーザー」列にアクセスしようとした理由がわかりません。User モデルには「belongs_to :company」と列「company_id」が含まれているため、存在しません。

4

2 に答える 2

0

Afaik has_one は、ソース テーブルが relationship_id 列を定義することを期待しています。あなたの場合、会社のテーブルに user_id 列が格納されていると想定しています。したがって、has_one の定義を変更して、方向と外部キーを指定するか、belongs_to に変更する必要があります。

于 2010-06-19T22:14:40.313 に答える
0

不適切な検証:

validates_uniqueness_of :user

この行がなければ、すべて問題ありません。

于 2010-06-20T07:18:49.430 に答える