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 に答える