0

我使用 jquery tokeninput 跟随 railscasts

http://railscasts.com/episodes/258-token-fields-revised

在创建自动完成标记令牌并已成功完成此操作。但是,我一直在尝试添加一个计数属性,非常类似于堆栈溢出标签计数器。

我的标签中有#index

    @tags = Tag.order(:name)
    #@tags = Tag.order(:name).where("name like ?", "%#{params[:term]}%")
    respond_to do |format|
        format.html
        format.json { render json: @tags.tokens(params[:q]) }
    end

当我渲染时,它会调用我的令牌方法,它是......

  def self.tokens(query)
    tags = where("name like ?", "%#{query}%")
    if tags.empty?
        [{id: "<<<#{query}>>>", name: "New: \"#{query}\""}]
    else
        puts tags.inspect
        tags
    end
  end

如果我输入“steelswarm”这个词并检查返回的标签,在我的控制台上它会说......

[#<Tag id: 4, name: "steelswarm", created_at: "2012-05-11 01:49:55", updated_at: "2012-05-11 01:49:55", count: 2>]

当用户开始输入单词“steelswarm”时,我希望下拉菜单显示“steelswarm x 2”,因为它的计数为 2。

我试过做

tags.map{ |tag| {:label => "#{tag.name} x #{tag.count}", :value => tag.name} }

在我的 else 语句中,但下拉菜单停止渲染。它甚至找不到第一个字母了。我究竟做错了什么?

:label 和 :value 属性不属于整个 jquery 吗?

我也一直在寻找选项

http://loopj.com/jquery-tokeninput/

但我似乎找不到有用的东西,或者至少我能想到......对不起,我对 json 和 jquery 不是很熟悉,所以非常感谢您的帮助 =)

谢谢你。

4

1 回答 1

0

我修好了它。似乎令牌只有一个 :id 和 :name 属性。所以我做了..

tags.map{ |tag| {  id: "#{tag.id}", name: "#{tag.name} # #{tag.count}" } }
于 2012-05-21T19:52:26.350 回答