在rails上的ruby中验证form_tag

时间:2014-05-14 10:09:09

标签: ruby-on-rails html5 ruby-on-rails-4

我正在研究Ruby 2和rails 4.我想添加html验证' required'在Rails的form_tag内。我的代码如下。

<%= form_tag file_download_contacts_path, :method => :post, :id => 'contact-form', :class => 'special'  do |f| %>     
   <div><%=  label_tag :Name  %><br />
        <%= text_field_tag "contact[name]" , nil, placeholder: "Your Name" %></div>
    <div><%=  label_tag :Email %><br />
        <%= email_field_tag "contact[email]" , nil, placeholder: "your@mail.com" %></div>
    <div><%=  label_tag :Mobile %><br />
        <%= telephone_field_tag "contact[phone]" , nil, placeholder: "Your Contact No" %></div>
    <div><br /><%= button_tag 'Submit' %></div>  

  <% end %>

点击提交按钮,它直接转到file_download_contacts_path页面,虽然文本区域是空白的。我怎么能阻止这个?在Html中,我们可以使用&#39; required&#39;。如果有任何身体可以帮助我。谢谢。

3 个答案:

答案 0 :(得分:0)

Rails在提交之前无法进行任何表单验证,因为验证需要在客户端进行(而rails当然是服务器端)。你需要使用javascript。如果你谷歌“javascript表单验证”,你会看到大量的信息。

jQuery是一个非常流行的javascript库,它有各种表单验证插件,谷歌和看看。

答案 1 :(得分:0)

这样的事可以帮到你

$(document).ready(function () {
$(“#contact-form”).validate({
debug: true,
rules: {
“contact[email]“: {required: true, email: true},
“contact[name]“: {required: true, name: true},
“contact[phone]“: {required: true, phone: true}
}
});
});

<强> Source

答案 2 :(得分:0)

注意:上面的答案都是正确的,简单的解释,很完美,但以防万一,如果您想向用户显示实际错误消息,(想要复杂的验证),那么下面的答案适合您

在这种情况下,我的表单中有两个复选框,并且我想验证是否应该至少单击一个复选框,否则,我将向用户显示错误消息。

<%= form_tag( add_to_telegram_path, method: :post, id: 'add-to-telegram-form') do |t| %>
  Select channel
  <%= check_box_tag "channel_names[]", id: 'channel_1'%> Channel 1
  <%= check_box_tag "channel_names[]", id: 'channel_2'%> Channel 2
  <%= button_tag "Send", :class => 'btn btn-success', id: 'add-to-telegram-btn', onclick: "validTelegram()" %>
<%end%>

然后用JS

function validTelegram() {
  event.preventDefault();
  var checkboxes = Array.from(document.getElementsByName("channel_names[]"));
  if(checkboxes.reduce((acc, curr) => acc || curr.checked, false)){
    $('#add-to-telegram-form').submit();
  } else {
    //swal('Error','Please select atleast one channel!','warning');
    alert('Some error!')
  }
}
  • 我在form_tag的提交点击时调用了JS函数,(如果您使用的是sibmit_tag,请用button_tag替换它)
  • 我已阻止了“提交”按钮的默认行为
  • 然后,我开始按其ID /类或名称获取元素,并检查了我想在JS中执行的操作,然后基于我的验证要么我在表单ID上调用Submit(),要么显示错误消息。

注意:为显示错误消息,我使用了Sweet alert,您可以坚持使用alert();,但是如果您要寻找更好的UI,请在JS中取消注释我的swal()代码并注释出alert() ); 您可以阅读有关Sweet Alert PopUp

的更多信息