除非名称已存在,否则将名称推送到结果?

时间:2012-11-25 15:26:57

标签: ruby-on-rails

我的代码控制器中有以下内容(params[:q]来自此插件:http://loopj.com/jquery-tokeninput/)。这基本上是此截屏视频的略微修改的产品:http://railscasts.com/episodes/258-token-fields

tags_controller.rb:

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

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

我希望仅在results << {:name => "Add: #{params[:q]}", :id => "CREATE_#{params[:q]}_END"}中不存在该名称时才@tags。因为现在看起来像这样:

  

编程#input field

     

编程#下拉菜单

     

添加:progamming#下拉菜单

我希望它只显示

  

编程#input field

     

添加:progamming#下拉菜单

如何做到这一点?

修改

以下是模型和JavaScript:

的application.js

$(function() {
  $("#post_tag_tokens").tokenInput("/tags.json", {
    crossDomain: false,
    prePopulate: $("#post_tag_tokens").data("pre"),
    preventDuplicates: true,
    theme: "facebook"
  });
});

post.rb:

   def tag_tokens=(ids)
    ids.gsub!(/CREATE_(.+?)_END/) do
      Tag.find_or_create_by_name(:name => $1).id
    end
    self.tag_ids = ids.split(",")
   end

1 个答案:

答案 0 :(得分:1)

你可以这样做:

 @tag = Tag.find_by_name(params[:q])

 @tag = Tag.name_like(params[:q])   #For this you need to install gem [searchlogic][1]

 if @tag.blank?
   # Do you things
 end