0

我的标签控制器中有以下操作:(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 认为它​​是一个新名称。

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

4

2 回答 2

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方法复制变量

于 2012-11-26T02:24:11.180 回答
1

通过调用去除空格String#strip- 去除所有前导和尾随空格:

" programming ".strip 
=> "programming"
于 2012-11-26T02:22:50.493 回答