4

たとえば、ProductsとOrdersの2つのテーブルがあるとします。簡単にするために、一度に購入できる製品は1つだけであるため、order_itemsのような結合テーブルはないと仮定します。つまり、Productには多くの注文があり、Orderは製品に属しているという関係です。したがって、product_idはOrderテーブルのfkです。

製品テーブルはSTIで、サブクラスはA、B、Cです。

ユーザーがサブクラスProductCを注文する場合、Orderモデルフィールドorder_detailsとorder_statusで2つの特別な検証をチェックする必要があります。これらの2つのフィールドは、他のすべてのProductサブクラス(つまり、AとB)ではnilにすることができます。つまり、ユーザーがAとBを購入するときに、これら2つのフィールドに対して検証を実行する必要はありません。

私の質問は:

Orderモデルに検証(おそらくカスタム)を記述して、ProductサブクラスCへのfk_idがordersテーブルに保存されているときに、OrderモデルがITSの2つのフィールド(order_detailsとorder_status)の検証のみを実行することを認識できるようにするにはどうすればよいですか? ?

4

1 に答える 1

4

重要なのは、モデルにvalidateメソッドを追加して詳細を確認することです。Order

  def validate
    if product and product.type_c?
      errors.add(:order_details, "can't be blank") if order_details.blank?
      # any other validations
    end
  end

またはそれらの線に沿った何か。タイプインを確認しvalidate、適切なエラーを追加するだけです。関数を作成しましたtype_c?。タイプを確認するだけですが、Productモデルは定義されています。

于 2010-04-01T19:27:22.963 に答える