1

私はこのクエリを持っています:

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 モデルではなく文字列を返すため、このクエリが何も返さないことです。

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 の calculate メソッド: 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 に答える