2017-02-16 7 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

Полезно добавлять проверки на стороне клиента, но если кто-то повторяет HTTP-запрос с использованием cURL или что-то в этом роде, он может ПОЧТОВИТЬ все, что захочет, и он все равно достигнет вашей базы данных. Если вы хотите быть в безопасности, вы также должны добавить подтверждения на стороне сервера. В контроллере вы можете добавить небольшой метод, например 'params.map {| k, v | v.present? } .all? 'или что-то еще и вывести' error', если не все значения. – Shiyason

+0

@ Shiyason, его невозможно запустить завиток от клиента. Кроме того, вы не можете достичь db только с помощью HTTP-запроса, так как это будет нарушение CSRF. Его больше зависит от качества кода, написанного dev, и того, как он позаботился обо всех проверка клиента и сервера ... – Milind

+0

Я не подразумеваю, что запрос будет отправлен от клиента/браузера. Если кто-то проверяет сетевой трафик с помощью 'chrome inspector',' mitmproxy' или какого-либо другого инструмента, он может просто изменить полезную нагрузку и повторно отправить запрос POST. В этом случае валидации на стороне клиента не помогут. Это то, что я имел в виду. Кроме того, я не хотел подразумевать, что HTTP-запросы будут обходить веб-приложение и доходить до БД. Я имею в виду без проверки на стороне сервера, данные POST пользователя просто будут сохранены в БД. – 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), вы можете попробовать с: