https://github.com/mbleigh/acts-as-taggable-on中有说:
# Find a user with matching all tags, not just one
User.tagged_with(["awesome", "cool"], :match_all => :true)
我在项目中需要用到这个,但是出现如下错误:生成的 SQL 语句有问题...
ruby-1.9.2-p180 :005 > Solution.tagged_with(["气虚质", "老年"], :match_all => :true)
ActsAsTaggableOn::Tag Load (0.8ms) SELECT `tags`.* FROM `tags` WHERE (name LIKE '气虚质' ESCAPE '!' OR name LIKE '老年' ESCAPE '!')
Solution Load (0.3ms) SELECT `solutions`.* FROM `solutions` JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 23 JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 150 LEFT OUTER JOIN taggings solutions_taggings_group ON solutions_taggings_group.taggable_id = solutions.id AND solutions_taggings_group.taggable_type = 'Solution' GROUP BY solutions.id HAVING COUNT(solutions_taggings_group.taggable_id) = 2
Mysql2::Error: Not unique table/alias: 'solutions_taggings_283cd6c': SELECT `solutions`.* FROM `solutions` JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 23 JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 150 LEFT OUTER JOIN taggings solutions_taggings_group ON solutions_taggings_group.taggable_id = solutions.id AND solutions_taggings_group.taggable_type = 'Solution' GROUP BY solutions.id HAVING COUNT(solutions_taggings_group.taggable_id) = 2
ActiveRecord::StatementInvalid: Mysql2::Error: Not unique table/alias: 'solutions_taggings_283cd6c': SELECT `solutions`.* FROM `solutions` JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 23 JOIN taggings solutions_taggings_283cd6c ON solutions_taggings_283cd6c.taggable_id = solutions.id AND solutions_taggings_283cd6c.taggable_type = 'Solution' AND solutions_taggings_283cd6c.tag_id = 150 LEFT OUTER JOIN taggings solutions_taggings_group ON solutions_taggings_group.taggable_id = solutions.id AND solutions_taggings_group.taggable_type = 'Solution' GROUP BY solutions.id HAVING COUNT(solutions_taggings_group.taggable_id) = 2
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `query'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:687:in `block in exec_query'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:685:in `exec_query'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql2_adapter.rb:679:in `select'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/base.rb:470:in `find_by_sql'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/relation.rb:114:in `block in to_a'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/identity_map.rb:72:in `without'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/relation.rb:113:in `to_a'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/activerecord-3.1.3/lib/active_record/relation.rb:436:in `inspect'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
from /Users/zhengmiclle/.rvm/gems/ruby-1.9.2-p180@healthier/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'ruby-1.9.2-p180 :006 >
我的 Gemfile 内容如下:
gem 'rails', '3.1.3'
gem 'mysql2', '0.3.11'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.1.5'
gem 'coffee-rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'devise', '1.5.3'
gem 'acts-as-taggable-on', '~> 2.2.1'
gem 'acts_as_tree', '0.1.1'
gem 'meta_search', '1.1.1'
gem 'jquery-rails', '1.0.19'
gem 'execjs', '1.2.13'
gem 'therubyracer', '0.9.9'
gem 'rails-i18n', '0.2.0'
gem 'fog', '1.1.2'
gem "kaminari", '0.13.0'
gem 'mini_magick', '3.3'
gem 'carrierwave', '0.5.8'
gem 'uuid', '2.3.4'
gem 'nokogiri', '1.5.0'