0

User、Task、および TaskInstance の 3 つのモデル/テーブルがあります。Task テーブルはタスクのマスター リストのようなもので、特定のユーザーに結合されていません。一方、TaskInstance テーブルには、ユーザーが特定のタスクを完了したことを示すレコードが含まれています。つまり、TaskInstance には、ユーザー ID、タスク ID、およびステータス ブール値があります。ユーザーには多くの TaskInstances があります。ユーザーは TaskInstances を共有せず、それぞれ独自のコレクションを持っています。

ユーザーが最初に Web サイトでアカウントにサインアップしたときUser.task_instancesに、マスター リストに存在するすべてのタスクの新しい TaskInstance がフィールドに入力されるようにしたいと考えています。

私が読んだことからbefore_create、初めて保存される前に User を更新する必要があるため、 を使用してこれを行う必要があると思います。これまでのところ、私は持っています:

class User < ActiveRecord::Base

    has_many :task_instances    

    before_create :populate_task_instances

    private

        def populate_task_instances
            #something here
        end
end

populate_task_instancesこれまでのところ、メソッドに何が含まれているのかわかりません。Task テーブルのすべてのレコードをループ処理し、それぞれに対して TaskInstance を作成し、TaskInstances のコレクションがユーザーのtask_instancesフィールドに確実に保存されるようにするにはどうすればよいですか?

これはかなり些細なことだと理解していますが、これが Rails への私の最初の進出です。

4

1 に答える 1

1

ここに私が考える1つの解決策があります

def populate_task_instances
  self.task_instances = Task.all.map {|task| TaskInstance.new task_id: task.id}
end
于 2012-07-26T04:41:30.520 に答える