在忽略Rails中的空格时按名称查找?

时间:2012-11-26 02:17:12

标签: ruby-on-rails

我的代码控制器中有以下操作: (params[:q]来自此插件http://loopj.com/jquery-tokeninput/

  def index
    @tags = Tag.where("name like ?", "%#{params[:q]}%")
    results = @tags.map(&:attributes)
    @tag = Tag.find_by_name(params[:q])
    if @tag.blank?
      results << {:name => "Add: #{params[:q]}", :id => "CREATE_#{params[:q]}_END"}
    end

    respond_to do |format|
      format.html
      format.json { render :json => results }
    end
  end

这部分:

  @tag = Tag.find_by_name(params[:q])
  if @tag.blank?
    results << {:name => "Add: #{params[:q]}", :id => "CREATE_#{params[:q]}_END"}
  end

使上面的代码行仅在当前标记名称不存在时触发。

问题是,如果用户在输入中键入类似的内容:

"programming " <- a trailing white space
" programming" <- a trailing white space

无论如何都会执行代码,因为尾随空格使得Rails认为它是一个新名称。

处理这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

params[:q].delete!(' ')
@tag = Tag.find_by_name(params[:q])
if @tag.blank?
  results << {:name => "Add: #{params[:q]}", :id => "CREATE_#{params[:q]}_END"}
end

注意第一行将删除params [:q]中的所有空格。如果这不是您想要的,您可以先使用 dup 方法

复制变量

答案 1 :(得分:1)

通过调用String#strip来删除空白区域 - 这会删除所有领先&amp;尾随空格:

" programming ".strip 
=> "programming"