2015-05-26 64 views
1

在rails應用程序中,如果它是空白的,我必須控制一個搜索字段(在提交操作中)。 這一個未連接到一個表中登記的一些數據:Rails:在提交時檢查字段是否爲空

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

我已經嘗試過在我的控制器定義動作進行檢查,我傳遞的參數的值:

if !(params[:search].present?) 
    redirect_to root_path, error: 'Insert a research key' 
else 
    @count = Product.search(params[:search]).count 

    if @count == 0 
    redirect_to root_path, error: 'No data found for your search' 
    else 
    @products = Product.search(params[:search]) 
    end 
end 

不限通過Rails驗證我的領域的想法?

+0

你的代碼似乎沒問題!我使用的是什麼問題 – aashish

回答

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 
}); 
+0

:Firefox =需要=>真好,但它不適用於谷歌瀏覽器。 – user3640056

2

您可以使用客戶端HTML5驗證(你還是應該做一個服務器端的檢查):

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

:required => true將要求在搜索領域有一些東西。

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