我的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语法,但似乎没有任何效果。当我从没有搜索字符串的视图中单击搜索按钮时,它只是在控制器路径下呈现一个空白页面。我希望它只是停留在同一页面上,什么也不做。
答案 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
但这可以被一些人视为反模式。但是我认为这在这里是合适的,实际上非常明确。