微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在Rails中使用jquery tokeninput?

我正在尝试在我的应用程序中的表单中添加一个tokeninput jquery字段,允许用户发布状态更新.我希望用户能够将作品(单独的模型)附加到状态更新.我正在使用act_as_taggable_on gem,我的查询指定标签上下文“工作”.但是,该字段不会加载任何搜索结果.

我实际上有一个第二个tokeninput字段,允许用户标签附加到状态更新,就像这个网站使用标签附加到此发行票.它工作正常!我正在尝试镜像该功能以指定搜索工作模型的上下文,并且我正在努力实现.

有任何想法吗?非常感谢您的时间和帮助!这是相关代码

发布模型

attr_accessible :content,:tag_list,:work_list

acts_as_taggable_on :tags
acts_as_taggable_on :works

后控制器(更新)

def work_list
 query = params[:q]  
 @work_list = ActsAsTaggableOn::Tag.includes(:taggings).where("taggings.context = 'works'").where("tags.name ILIKE ?","%#{params[:q].downcase.to_s}%").all
 @work_list = @work_list.select { |v| v.name =~ /#{query}/i }
  respond_to do |format|
    format.json { render :json => @work_list.map{|w| {:id => w.name,:name => w.name }}}
  end
end


def tags 
    query = params[:q]
    if query[-1,1] == " "
      query = query.gsub(" ","")
      ActsAsTaggableOn::Tag.find_or_create_by_name(query)
    end

    #Do the search in memory for better performance

    @tags = ActsAsTaggableOn::Tag.all
    @tags = @tags.select { |v| v.name =~ /#{query}/i }
    respond_to do |format|
      format.json{ render :json => @tags.map{|t| {:id => t.name,:name => t.name }}}
    end
  end

形成

<%= f.text_field :tag_list,:id => "post_work_list","data-pre" => @post.work_list.map(&:attributes).to_json %>

JavaScript的

$->
  $("#post_tags").tokenInput "/posts/tags.json",prePopulate: $("#post_tags").data("pre")
    preventDuplicates: true
    noresultsText: "No results,press space key to create a new tag."
    animateDropdown: false

$->
  $("#post_work_list").tokenInput "/posts/work_list.json",prePopulate: $("#post_work_list").data("pre")
    preventDuplicates: true
    noresultsText: "No results"
    animateDropdown: false

路线

get "posts/tags" => "posts#tags",:as => :tags
get "posts/work_list" => "posts#work_list",:as => :work_list

谢谢!

编辑:我清理了这个问题和更新的所有代码.我还开始在enginhere.com上进行对话,其他工程师也有其他一些故障排除方法

http://bit.ly/179kiqH

欢迎在上面的enginhere.com对话中继续对话,然后在这里发布最终的官方答案,以获得赏金!

再次感谢!

最佳答案
如果你使用acts_as_taggable_on gem,它比在railscast中更容易.

型号(邮政):

acts_as_taggable_on :works

查看(表格):

= f.text_field :work_list,"data-pre" => f.object.work_list.sort.collect {|t| {id: t,name: t } }.to_json

JS:

$->
  $("#post_work_list").tokenInput "/posts/works.json",preventDuplicates: true,animateDropdown: false

原文地址:https://www.jb51.cc/jquery/428228.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐