簡體   English   中英

如何在不顯示默認視圖的情況下從控制器操作返回頭部?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM