【问题标题】:acts_as_taggable_on and auto_complete returning no resultsact_as_taggable_on 和 auto_complete 不返回结果
【发布时间】:2012-01-25 15:02:11
【问题描述】:

我在模型中使用acts_as_taggable_on,并尝试实现auto_complete 插件。似乎我已经正确连接了所有内容,但搜索没有返回任何结果。到目前为止,这是我所拥有的:

在视图中:

<%= text_field_with_auto_complete(:link, :tag_list, {}, {:tokens => ','}) %> 

在控制器中:

  def auto_complete_for_link_tag_list 
    @tags = Link.tag_counts_on(:tags).where('tags.name LIKE ?', params[:link][:tag_list]) 
    render :inline => "<%= auto_complete_result(@tags, 'name') %>", :layout => false 
    logger.info "#{@tags.size} tags found."
  end 

记录器不断返回 0 个标签,视图中没有显示任何内容(是的,布局包括 javascript 默认值)。正在生成的 SQL 如下所示:

SELECT tags.*, COUNT(*) AS count FROM "tags" LEFT OUTER JOIN taggings ON tags.id = taggings.tag_id AND taggings.context = 'tags' INNER JOIN links ON links.id = taggings.taggable_id WHERE (((tags.name LIKE 'so') AND (taggings.taggable_type = 'Link'))) GROUP BY tags.id, tags.name HAVING COUNT(*) > 0

任何想法或建议都会很棒。

【问题讨论】:

标签: ruby-on-rails autocomplete acts-as-taggable-on


【解决方案1】:

您也可以使用ActiveRecord 构建类似的查询

def self.tagged_like(term)
  conditions = ["taggings.taggable_type = 'Link' AND LOWER(tags.name) LIKE ?",
                "%#{term.downcase}%"]

   ActsAsTaggableOn::Tag.find(:all,  
                              :include => "taggings", 
                              :conditions => conditions)
end

这会生成以下 SQL:

SELECT [..fields..] FROM "tags" LEFT OUTER JOIN "taggings" ON taggings.tag_id = tags.id 
WHERE (taggings.taggable_type = 'Link' AND LOWER(tags.name) LIKE '%something%')

AATO 2.0.6 版

【讨论】:

    【解决方案2】:

    我遇到了这个问题,最后写了自己的 SQL,你的可能看起来像这样:

    @tags = Tag.find_by_sql("SELECT tags.name, tags.id
    FROM tags JOIN taggings ON tags.id = taggings.tag_id 
    JOIN links ON taggings.taggable_id = links.id 
    JOIN groups ON links.group_id = groups.id 
    WHERE groups.id = X
    AND tags.name LIKE '%?%'",params[:link][:tag_list])
    

    您需要更新 groups.id = X 部分,因为我不确定您是如何获取 group_id 的。

    Tag 是插件提供的一个类,像这样手动提供 sql 为您提供了世界上所有的灵活性。

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2019-06-18
      • 2020-04-05
      • 2018-03-19
      • 2011-07-17
      • 2015-09-29
      相关资源
      最近更新 更多