1

我有这个查询:

tag_names = Tag.find_by_sql "SELECT GROUP_CONCAT(' ', name) FROM tags WHERE id IN (#{tag_ids.join(',')}) AND tag_type = 'Communication_Ways'"

有没有办法在rails中做到这一点: Tag.find(:all, ???)

问题是这个查询没有返回任何东西,因为 GROUP_CONCAT 返回一个字符串而不是一个标签模型。

4

2 回答 2

0

你能试试这个:

您可以使用calculate方法GROUP_CONCAThttp ://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 ' '")
于 2013-11-04T13:10:52.363 回答
0

如果 tag_ids 是一个数组,我会尝试:

tag_names = Tag.find(:tag_id = tags_ids).map(&:name).uniq.join(',')

Rails 会将数组[tag_ids]转换为IN语句。

您可能需要稍微修改一下语法2.3.8,我使用的是 rails 3 和 4。

于 2013-11-04T14:38:42.327 回答