我的代码控制器中有以下内容(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
答案 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