我正在尝试在我的应用程序的表单中添加一个 tokeninput jquery 字段,以允许用户发布状态更新。我希望用户能够将作品(单独的模型)附加到状态更新中。我正在使用 act_as_taggable_on gem,并且我的查询指定了标签上下文“有效”。但是,该字段不会加载任何搜索结果。
我实际上有第二个令牌输入字段,允许用户将标签附加到状态更新,就像这个网站使用标签附加到这个问题单一样。它工作正常!我正在尝试镜像该功能以指定搜索作品模型的上下文,并且我正在努力实现。
有任何想法吗?您的时间和帮助将不胜感激!以下是相关代码:
后模型
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 上开始了一次对话,该网站还从其他工程师那里得到了一些其他故障排除:
继续在上述 enginhere.com 对话中进行对话,然后在此处发布最终的官方答案以获取赏金,请随时提供帮助!
再次感谢!