acts_as_taggable_on_steroids
はacts_as_taggableを強化したRailsプラグインで、非常に便利なので愛用しています。
しかし、find_tagged_withメソッドで OR を含む :conditions を指定すると、SQLの演算順序の問題で挙動がおかしくなります。
この問題を修正するには、以下のようにpluginコードを書き換えればOKです。
acts_as_taggable_on_steroids/lib/acts_as_taggable.rb
def find_options_for_find_tagged_with(tags, options = {})
tags = tags.is_a?(Array) ? TagList.new(tags.map(&:to_s)) : TagList.from(tags)
options = options.dup
return {} if tags.empty?
conditions = []
#conditions << sanitize_sql(options.delete(:conditions)) if options[:conditions]
if options[:conditions]
conditions << "(#{sanitize_sql(options.delete(:conditions))})"
end
要は、オリジナルの :conditions を括弧で括って演算順序の問題が起きないようにしているわけですね。
posted by
genki on Mon 5 Nov 2007 at 17:07 with 0 comments