我的代码控制器中有以下操作:
(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认为它是一个新名称。
处理这个问题的最佳方法是什么?
答案 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"