Rails:检查提交时字段是否为空

时间:2015-05-26 13:41:47

标签: ruby-on-rails validation

在rails应用程序中,我必须控制(在提交操作上)的搜索字段,如果它是空白的。 这个没有连接到一个表来注册一些数据:

library(dplyr)
test %>% left_join(statecode, by = "StateID") %>% select(-StateID)
  ID State
1  1  Mass
2  2    NY
3  3  Mass

我已经尝试在我的控制器中定义一个动作,以检查我传递的参数的值:

 <%= form_tag products_path, :method => 'get' do %>
  <%= text_field_tag :search, params[:search]%>
  <%= submit_tag "Ricerca" %>   
 <% end %>

通过Rails验证我的字段是否有任何想法?

3 个答案:

答案 0 :(得分:2)

您可以为客户端使用HTML5验证(您仍应进行服务器端检查):

<%= form_tag products_path, :method => 'get' do %>
  <%= text_field_tag :search, params[:search], required: true %>
  <%= submit_tag "Ricerca" %>   
<% end %>

:required => true将要求搜索字段中包含某些内容。

答案 1 :(得分:2)

将ActiveModel用于带有验证的无表格模型。

模特:

class ExampleSearch
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :input

  validates_presence_of :input
  validates_length_of :input, :maximum => 500

end

和你的表格:

<%= form_for ExampleSearch.new(), :url=>posts_path, :method=>:get, :validate=>true do |f| %>
  <p>
    <%= f.label :input %><br />
    <%= f.text_field :input, required: true %>
  </p>
  <p><%= f.submit "Search" %></p>
<% end %>

为了获得良好的用户体验,请使用gem 'client_side_validations'

ActiveModel的信息:

http://railscasts.com/episodes/219-active-model

答案 2 :(得分:1)

您可以验证服务器端和客户端。你总是想要服务器端,因为可以在不使用表单的情况下访问url,你需要一种方法来处理它。客户端将使用户体验更好,因为他们不需要重新加载页面以获得反馈。

对于服务器端,它就像if params[:search].blank?一样简单,这将检查= nil= ""

对于客户端,有两种主要方式。 Javascript和HTML 5.使用HTML 5,您可以将:required => true添加到表单元素中,这就是您所需要的。 使用javascript,或者在这种情况下,JQuery可以像这样工作

$('form').submit(function() {  //When a form is submitted...
  $('input').each(function() { //Check each input...
    if ($(this).val() == "") { //To see if it is empty...
      alert("Missing field");//Say that it is
      return false;            //Don't submit the form
    }
  });
  return;                      //If we made it this far, all is well, submit the form
});