我在我的標籤控制器中有以下內容(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
也許'除非results.any? {| r | r [:name] ==「Add:#{params [:q]}」} ...' –
@injekt你的意思是這樣的嗎? '除非結果。 {| r | r [:name] ==「Add:#{params [:q]}」,:id =>「CREATE _#{params [:q]} _ END」}'恐怕這會破壞代碼(對不起,我是Rails的初學者)。 – alexchenco