0

このようなネストされたリソースがあります

resources :projects do resources :tasks end

タスクには number という名前のフィールドがあります。タスクを作成するたびに、親プロジェクト内で連番を付けたいと思います。

これは私のモデルクラスです

   class Task < ActiveRecord :: Base
 belongs_to :project

    validate_presence_of :title
    before_create :generate_number

    private
    def generate_number
        if project.tasks.nil? || project.tasks.count < 1
            self.number = 1
        else
            self.number = list.topics.count+1
        end
    end
end

特定のことについて確信が持てません: このロジックは、タスク モデル、プロジェクト モデル、または別のクラス/モジュールに属していますか? フィルタ前のベストは何ですか。(before_create、before_validation、validation)? タスクを作成する方法はたくさんあるからです。リストで、リストで、単独で、それをリストに添付します...そして、どのフィルターが私のテストで機能するので、たとえばファクトリーガールでいくつかのフェイクをセットアップできます...現在、FactoryGirlは常に実行されるとは限らないためです番号を生成...

ここは私の工場です

FactoryGirl.define do 
factory :project do
    name "Hello world"
end
trait :with_tasks do
    ignore do
        number_of_tasks 3
    end
    after :create do |project,evaluator|
        @project.Factory.create_list :taks, evaluator.number_of_tasks, :project => project
    end
end

終わり

何が最高でしょう。私の仕様と本番環境で機能するプロジェクトに応じて、連続したカスタムタスク番号を生成する信頼できる方法は? ベストプラクティスのヒントをいただければ幸いです。

4

1 に答える 1

0

関数を呼び出すbefore_create コールバックをTaskモデルに保持しgenerate_numberます。これは、Factory.create を使用すると数値が追加される Factory girl で機能するはずですが、Factory.build を使用すると機能しません。

于 2012-08-15T16:25:07.313 に答える