住所、市区町村、州、郵便番号のモデルがあります。私はユーザーが何かを記入しないようにするか、すべてを記入するかを選択します。Rails 5アドレス形式。何も提供されていない場合は、すべてまたはデフォルト値を記入してください。
現在のところ、ユーザーは必要なものを入力することができます。たとえば都市のみが入力でき、保存されます。
私は、すべての列を記入する必要があるか、まったく何も記入する必要がないことを確認したいと思います。
バリデーションをまとめてグループ化することはできますか?
住所、市区町村、州、郵便番号のモデルがあります。私はユーザーが何かを記入しないようにするか、すべてを記入するかを選択します。Rails 5アドレス形式。何も提供されていない場合は、すべてまたはデフォルト値を記入してください。
現在のところ、ユーザーは必要なものを入力することができます。たとえば都市のみが入力でき、保存されます。
私は、すべての列を記入する必要があるか、まったく何も記入する必要がないことを確認したいと思います。
バリデーションをまとめてグループ化することはできますか?
このシナリオに適したJquery Validation pluginを使用できます。 非常に軽く、簡単に設定可能です。
ページでJSを追加して、あなたは...ここ
を基本的な例を見つけることができます。..
$("#form").validate({
///add rules for every input types and validations
})
して、フォーム上のバリデータを初期化する - form validation
のために - についてsimple text box validaton
希望します。あなたは、検証作品を作るためのようなものの条件を定義することができ
:
: 今validates_presence_of :address, :city, :state, :zip, if: :any_field_filled?
def any_field_filled?
attributes.any? { |_k, v| v.present? }
end
をあなたには、いくつかの特定のフィールド(のようなid
またはcreated_at
/updated_at
)を除外したい場合は、あなたが試みることができます
FIELDS_TO_EXCLUDE = %w(id created_at updated_at).freeze
validates_presence_of :address, :city, :state, :zip, if: :any_field_filled?
def any_field_filled?
attributes.any? do |k, v|
!FIELDS_TO_EXCLUDE.include?(k) && v.present?
end
end
クライアント側の検証を追加することは良いことですが、誰かがcURLなどを使用してHTTPリクエストを再生した場合、必要なPOSTを実行してもデータベースにアクセスできます。安全にしたい場合は、サーバー側の検証も追加する必要があります。あなたのコントローラでは、 'params.map {| k、v | v.present?すべての値が存在しない場合は 'error'を返します。 – Shiyason
@ Shiyason、クライアントからのカールを実行することはできません。また、httpリクエストではDBにアクセスできません。これはCSRFの違反となります。devによって書かれたコードの品質と、クライアントとサーバのバリデーション... – Milind
私は、リクエストがクライアント/ブラウザから送信されることを暗示していません。誰かが 'chrome inspector'や' mitmproxy'などのツールを使ってネットワークトラフィックを検査すると、ペイロードを修正してPOST要求を再送するだけです。この場合、クライアント側の検証は役に立たないでしょう。また、HTTPリクエストがWebアプリケーションをバイパスしてDBに到達することを意味するものではありませんでした。私はサーバー側の検証なしでは、ユーザーのPOSTデータは単にDBに保存されるということです。 – Shiyason