[英]How can you return a head from a controller action without rendering its default view?
我在我的Rails 5應用程序中有一個搜索控制器,如果搜索項為空白,我希望它返回一個400狀態的頭,否則搜索並呈現結果頁面。
這是我的控制器......
def new
search_term = search_params[:search].downcase
head 400 and return if search_term.blank?
@search_results = Post.where("lower(title) LIKE ? OR link LIKE ?",
"%#{search_term}%",
"%#{search_term}%").
order("created_at DESC").
paginate(page: params[:page], per_page: 30)
if @search_results.empty?
flash.now[:information] = "No results found"
end
end
private
def search_params
params.require(:search).permit(:search)
end
我已經嘗試調整if和return語法,但似乎沒有任何效果。 當我從沒有搜索字符串的視圖中單擊搜索按鈕時,它只是在控制器路徑下呈現一個空白頁面。 我希望它只是停留在同一頁面上,什么也不做。
實際上寫作
params.require(:search).permit(:search)
使search
參數必須存在而不是空白。
為了使它工作改變它后面的一點點邏輯並且不使用強參數(你手動檢查它):
search_term = params[:search]
head 400 and return if search_term.blank?
search_term.downcase!
或者您可以通過編寫代碼來利用該異常:
rescue_from ActionController::ParameterMissing, with: :render_error
def new
search_term = search_params[:search].downcase!
(rest of your code)
end
protected
def render_error
head 400
end
但這可以被一些人視為反模式。 但是我認為這在這里是合適的,實際上非常明確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.