簡體   English   中英

actions_as_taggable_on和auto_complete不返回結果

[英]acts_as_taggable_on and auto_complete returning no results

我在模型中使用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

任何想法或建議都很棒。

您還可以使用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

我遇到了這個問題,最后寫了自己的SQL,您的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可為您提供世界上所有的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM