2012-11-25 75 views
0

我在我的標籤控制器中有以下內容(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場

編程#下拉菜單

地址:預設電臺#下拉菜單

我想它只是像

編程#輸入字段

地址:預設電臺#下拉菜單

如何實現這一目標?

編輯:

這是以防萬一的模型和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 
+0

也許'除非results.any? {| r | r [:name] ==「Add:#{params [:q]}」} ...' –

+0

@injekt你的意思是這樣的嗎? '除非結果。 {| r | r [:name] ==「Add:#{params [:q]}」,:id =>「CREATE _#{params [:q]} _ END」}'恐怕這會破壞代碼(對不起,我是Rails的初學者)。 – alexchenco

回答

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 
+0

非常感謝!第一個工作。 – alexchenco

相關問題