我有这个查询:
tag_names = Tag.find_by_sql "SELECT GROUP_CONCAT(' ', name) FROM tags WHERE id IN (#{tag_ids.join(',')}) AND tag_type = 'Communication_Ways'"
有没有办法在轨道中做到这一点:Tag.find(:all,???)
问题是此查询不返回任何内容,因为GROUP_CONCAT返回的是字符串而不是 Tag 模型。
你能试试这个吗:
您可以使用calculate
方法执行GROUP_CONCAT
: http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Calculations.html#method-i-calculate
Tag.select(:name).where(:id => tag_ids, :tag_type => 'Communication_Ways').calculate(:group_concat, "name separator ' '")
针对 Rails 2.3.8 的更新
Rails 2.3.8 中的计算方法:http://api.rubyonrails.org/v2.3.8/classes/ActiveRecord/Calculations/ClassMethods.html#M001705
Tag.find(:all, :select => 'name', :conditions => ["id IN (?) AND tag_type = (?)", tag_ids.join(', '), 'Communication_Ways']).calculate(:group_concat, "name separator ' '")
如果tag_ids是一个数组,我会尝试:
tag_names = Tag.find(:tag_id = tags_ids).map(&:name).uniq.join(',')
Rails 会将一系列[tag_ids]
转换为 IN
语句。
你可能不得不稍微摆弄一下语法2.3.8
,我使用rails3和4。