你的問題是有點paradoxial:
如果未找到記錄,則顯示錯誤消息,但不顯示 重定向到酒店/索引頁
您要求的是在向您的應用程序發送請求並顯示消息而不重定向之後,執行的功能可以實現只有?
阿賈克斯
你可能會用最好的Ajax (Asynchronous Javascript and XML):
這是送的典型的 「HTTP」 範圍之外&接收請求的方式請求(IE無需重新加載頁面)。這聽起來像你要找的東西,因爲它會確保你能夠返回你想要的數據而不需要重定向到您的index
視圖。
阿賈克斯的重要性在於,它提供了許多HTTP開發人員提供了他們的應用程序中創建更多的「有機」的互動結構的能力(即不是有你想要做的事,每次刷新頁面)
Ajax是非常簡單的實現 - 我建議它給你:
-
搜索
這裏就是我想要做的事:
#app/assets/javascripts/application.js
$(document).on("ajax:success", "#search", function(status, data, xhr){
$(this).append(data);
});
#config/routes.rb
...
resources :hotels do
get :search, on: :collection
end
#app/views/homepage/index.html.erb
<%= form_tag hotels_search_path, method: :get, id: "search", remote: true do %>
<%= text_field_tag :search, nil, :class => 'search-box'%>
<%= submit_tag "Search", :name=>'btnsearch' %>
<% end %>
這將發出一個「獲取」請求您hotels_search
路徑 - 這將讓你做到以下幾點:
#app/models/hotel.rb
class Hotel < ActiveRecord::Base
def self.search search
results = where('hotel_location LIKE ?',"%#{search}%") if search
if results
return results
else
return "No Records"
end
end
end
#app/controllers/hotels_controller.rb
class HotelsController < ApplicationController
respond_to :js, :json, :html
def search
@hotels = Hotel.search params[:search]
respond_with @hotels, layout: false
end
end
Thanks.I有另外一個問題,如果我輸入一個無效的值,則我被重定向到「酒店/索引」頁面,我什麼都沒有。所以,我想驗證,如果什麼都沒有,那麼不要將我重定向到該頁面 – John 2014-09-06 07:39:11
@John如果你想驗證它的不正確的值,那麼你將不得不改變你的用戶界面和使用AJAX或你可以做的是在裏面您的索引操作檢查酒店的價值,如果它爲零,則將用戶重定向到您的搜索頁面並顯示一些類似無效值的Flash消息。哪種選擇適合您的需求?將相應地更新我的答案 – Mandeep 2014-09-06 07:43:34
@John我更新了我的答案非Ajax方式。讓我知道它是否適用於您 – Mandeep 2014-09-06 09:01:12