0

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

class Company < ActiveRecord::Base
    has_and_belongs_to_many :jobs
    validates :name, presence: true
end

そしてジョブモデル:

class Job < ActiveRecord::Base
    has_and_belongs_to_many :companies
    validates :name, presence: true
end

collection.createメソッドを除いて、すべて正常に動作します。Railsのドキュメントによると:

collection.createメソッドは、関連付けられたタイプの新しいオブジェクトを返します。このオブジェクトは、渡された属性からインスタンス化され、結合テーブルを介したリンクが作成され、関連付けられたモデルで指定されたすべての検証に合格すると、関連付けられたオブジェクトが保存されます。

これは私には正しく機能していないようです。子オブジェクトが無効な場合でも(無効なモデルが保存されないために検証が機能する場合でも)、関連付けは作成されます。この単体テストは、私がどのように実行しようとしているのかを説明するために作成しました。

test "add invalid job to company" do
  company = FactoryGirl.create(:company_with_job)

  # I also tried:
  # company.jobs << FactoryGirl.build(:job, name: "")
  company.jobs.create({name: ""})
  company.save
  assert_equal 1, company.jobs.size
end

サイズは代わりに「2」であり、company.jobsを調べると、次のようになります。

[#<Job id: 1, name: "My Job 1", created_at: "2012-11-07 10:26:10", updated_at: "2012-11-07 10:26:10">, 
#<Job id: nil, name: "", created_at: nil, updated_at: nil>]

私は愚かな何かを見逃していると確信していますが、私はしばらくの間これに頭をぶつけていて、私が間違っていることを理解できないようです。

ありがとう、
g

4

1 に答える 1

1

company.jobs実際には2つのジョブが含まれていますが、1つは永続化され、無効なジョブは永続化されません。

あなたはテストすることができます:

  • company.jobs.select(&:persisted?).size

  • company.reload.jobs.size

于 2012-11-07T10:46:22.247 に答える