如何在不显示默认视图的情况下从控制器操作返回头部?

时间:2017-03-23 11:30:42

标签: ruby-on-rails

我的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语法,但似乎没有任何效果。当我从没有搜索字符串的视图中单击搜索按钮时,它只是在控制器路径下呈现一个空白页面。我希望它只是停留在同一页面上,什么也不做。

1 个答案:

答案 0 :(得分:1)

实际上写作

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

但这可以被一些人视为反模式。但是我认为这在这里是合适的,实际上非常明确。