2017-02-16 9 views
1

住所、市区町村、州、郵便番号のモデルがあります。私はユーザーが何かを記入しないようにするか、すべてを記入するかを選択します。Rails 5アドレス形式。何も提供されていない場合は、すべてまたはデフォルト値を記入してください。

現在のところ、ユーザーは必要なものを入力することができます。たとえば都市のみが入力でき、保存されます。

私は、すべての列を記入する必要があるか、まったく何も記入する必要がないことを確認したいと思います。

バリデーションをまとめてグループ化することはできますか?

答えて

1

このシナリオに適したJquery Validation pluginを使用できます。 非常に軽く、簡単に設定可能です。

ページでJSを追加して、あなたは...ここ

を基本的な例を見つけることができます。..

$("#form").validate({ 
    ///add rules for every input types and validations 
    }) 

して、フォーム上のバリデータを初期化する - form validation

のために - についてsimple text box validaton

希望します。あなたは、検証作品を作るためのようなものの条件を定義することができ

+0

クライアント側の検証を追加することは良いことですが、誰かがcURLなどを使用してHTTPリクエストを再生した場合、必要なPOSTを実行してもデータベースにアクセスできます。安全にしたい場合は、サーバー側の検証も追加する必要があります。あなたのコントローラでは、 'params.map {| k、v | v.present?すべての値が存在しない場合は 'error'を返します。 – Shiyason

+0

@ Shiyason、クライアントからのカールを実行することはできません。また、httpリクエストではDBにアクセスできません。これはCSRFの違反となります。devによって書かれたコードの品質と、クライアントとサーバのバリデーション... – Milind

+0

私は、リクエストがクライアント/ブラウザから送信されることを暗示していません。誰かが 'chrome inspector'や' mitmproxy'などのツールを使ってネットワークトラフィックを検査すると、ペイロードを修正してPOST要求を再送するだけです。この場合、クライアント側の検証は役に立たないでしょう。また、HTTPリクエストがWebアプリケーションをバイパスしてDBに到達することを意味するものではありませんでした。私はサーバー側の検証なしでは、ユーザーのPOSTデータは単にDBに保存されるということです。 – Shiyason

0

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 
関連する問題