3

これはよくある問題だと思いますが、私は困惑しています。

「ステップ」モデルに has_many :through テーブルがあります。

has_many :questions, :through => :question_step

その question_step モデルには、 question_id フィールドと step_id フィールドに存在バリデーターがあります。

validates_presence_of :question_id, :step_id

また、どの質問がどのステップに属するかを決定するチェックボックスがあります

td= check_box_tag "step[question_ids][]", question.id, @step.question_ids.include?(question.id)

これで問題なく動作しますが、新しいステップに質問を追加する場合を除きます。step_id が空白であるため、 question_step モデルは検証に失敗します。question_step モデルで validate_presence_of :step_id 引数を削除すると問題なく動作しますが、実際には step_id が存在することを確認したいと考えています。

これはよくある問題だと思います。...何かご意見は?

4

2 に答える 2

1

ステップ ID と質問 ID が存在することを検証するのではなく、質問とステップ オブジェクトがあるかどうかを確認できます。

validates_presence_of :question, :step

それが機能しない場合は、アプリケーション レベルの検証を削除し、代わりにデータベース制約を追加することを検討する必要があります。移行の列に null 以外の制約を追加するだけで済みます。

def up
  change_column question_steps, :question_id, :integer, :null => false
  change_column question_steps, :step_id,     :integer, :null => false
end
于 2013-03-30T01:40:05.453 に答える