link_to submit ボタンにカスタム検証を実行させる方法はありますか?
特定のフィールドの存在をチェックする検証を作成するのに助けが必要です。また、ネストされたフォーム配列に少なくとも 4 つのエントリがあることを確認してください。ネストされたフォームに宝石の繭を使用しており、プロジェクトでは、ユーザーがアプリケーション フォームに少なくとも 4 つの質問を添付する必要があります。
私の協会は次のとおりです。
class App < ActiveRecord::Base
belongs_to :user
has_many :questions, :dependent => :destroy
end
class Question < ActiveRecord::Base
belongs_to :app
end
マルチステップコントローラー:
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :personal, :school, :grades, :extra_activity, :paragraph, :submit
def show
@user = User.find(current_user)
case step
when :school, :grades, :extra_activity, :paragraph, :submit
@question = Question.find(current_user)
end
render_wizard
end
def update
@user = User.find(current_user)
@user.update_attributes(user_params)
case step
when :school, :grades, :extra_activity, :paragraph, :submit
@question = Question.find(current_user)
@question.update_attributes(question_params)
end
render_wizard @user
end
ユーザーが作成されると、複数ステップの質問フォームが作成されます。
たとえば、私の邪悪なフォームの 2 ページ目で、高校名の存在を検証しようとしてvalidates :highschool, :presence => true
いますが、最後の送信ページで高校を記入せずにフォームを送信できます。
解決:
文字列である「steps」というユーザーに移行を作成しました。
次に、次のコードをユーザー モデルに追加します。
class App < ActiveRecord::Base
validate :minimum_number_of_questions_required, if: "step == 'extra_activity'"
private
def minimum_number_of_questions_required
if questions.count < 4
errors[:base] << "You must have at least 4 questions attached."
end
end
end
次に、複数のモデルを 1 つの複数ページ フォームに変換する user_steps コントローラーで、update メソッドに次のコードを追加しました。
case step
when :extra_activity
@user.step = step.to_s
end
簡単に言えば、フォームのどのステップにいるかに基づいてレールがユーザーを追跡しているということです。ステップに基づいて、フォーム ステップに固有の検証を実行できます。
これは、extra_activity ステップで最小 4 つの質問しか必要ないという事実に役立ちますが、検証で許可されなかったため、前のステップを通過できませんでした。同じモデルで作業していることを思い出してください。
使用する Gem: Cocoon (単純なネストされたフォームの場合) および Wicked (単純な複数ステップのフォームの場合)