2

Rails で新しい企業レコードを作成するたびに、その企業のデフォルト (空白) の連絡先レコードを追加する必要があります。フロント デスク、受付、人事、IT など...名前以外のデータはありません。ユーザーが後で入力するためのプレースホルダーです。

したがって、私の会社のモデルには has_many の連絡先があり、連絡先は company_to company に属しています。連絡先レコードは静的であり、追加されるすべての新しい会社で同じですが、連絡先テーブルにデータを事前に入力する必要があるため、ユーザーはその必要がありません。

データベースのシードについて多くのことを読みましたが、ユーザーが会社を動的に作成するたびに端末を使用することはできず、その会社に動的に関連付ける必要があり、レコードは不可知論的ではありません。播種は適切ではないようです。これはどのように行うべきですか?

4

3 に答える 3

3

before_save属性が空かどうかをチェックするフィルターを使用し、それ以外の場合はデフォルトに設定する必要があります。

を使用すると、before_save後で削除を防ぐことができます。

ただし、空になることのないフィールドに対してのみこれを行うように注意してください。

 class Company < ActiveRecord::Base
   has_many :contacts

   before_save :add_defaults

   def add_defaults
     contacts ||= Contact.default_list  # this only sets it if it's nil
     # you can implement Contact#default_list as a method, or as a scope in the contacts model
   end
 end
于 2013-05-17T18:04:03.700 に答える
1

モデルのafter_createコールバックはどうですか?Company

次のようにします。

class Company < ActiveRecord::Base
  has_many :contacts

  after_create :add_contacts

  def add_contacts
    contacts.create(name: "Some name", phone: "...", ....)
  end
end
于 2013-05-17T18:00:28.607 に答える
0

概念上はテスト データを生成するために存在しますが、FactoryGirl gem はこの目的に非常に役立ちます。ここで説明したアプローチと組み合わせて使用after_save​​すると、空白のレコードを一元的に定義するのに適した場所が得られます。

于 2013-05-17T19:41:07.783 に答える