项目里有用到meta_search与acts-as-taggable-on这两个gem,后台录入的MM需要有通过标签查询的功能
meta_search的文档好像没有提到类似这种需求的解决方法,GOOGLE之:

找到如下解决方法
http://stackoverflow.com/questions/5766427/combining-meta-search-with-acts-as-taggable-on
Post.metasearch({:title_or_tag_taggings_tag_name_contains => params[:search]})

在我项目中,acts-as-taggable-on :times 相应改成
<%= f.select :time_taggings_tag_name_contains, [["请选择",""]]+Tag::TIMES %>

在console中测试能达到效果,但是生成的SQL,有些复杂
ruby-1.9.2-p180 :004 > Solution.metasearch({:time_taggings_tag_name_contains => "XXX"})
  Solution Load (6.6ms)  SELECT `solutions`.* FROM `solutions` LEFT OUTER JOIN `taggings` ON `taggings`.`taggable_id` = `solutions`.`id` AND taggings.tagger_id IS NULL AND taggings.context = 'times' AND `taggings`.`taggable_type` = 'Solution' LEFT OUTER JOIN `tags` ON `tags`.`id` = `taggings`.`tag_id` WHERE (`tags`.`name` LIKE '%XXX%')


有个问题:
我发布到服务器后测试报错:
Mysql2::Error: Unknown column 'tags.id' in 'on clause': SELECT COUNT(DISTINCT `solutions`….......
我比较了一下本机与服务器的MySQL版本:
本机:
mysql5  Ver 14.14 Distrib 5.1.53, for apple-darwin10.5.0 (i386) using readline 6.1
服务器:
mysql  Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1
不知道是不是因为服务器版本的差异导致的这个问题。
 

Home Blog Delicious Github Flickr About Contact

© Miclle.Zheng . Powered by Forest Chalet