1

すべて数値である複数の文字列があります。それらはすべて同じ db テーブル内にあります。それらをすべて結合して最大数でソートする方法はありますか?

(疑似コード) のようなもの:

:include => :word_one_value, :word_two_value, :word_three_value, :sort_by => "sum ASC"
4

1 に答える 1

1

MySql では:

Foo.order '(convert(word_one, unsigned) +
            convert(word_two, unsigned) +
            convert(word_three, unsigned))'

ActiveRecord では:

Foo.all.sort_by do |f| 
  %w[one two three].sum { |n| f.send("word_#{n}").to_i } 
end

または、これらのフィールドが Foo 内にある場合:

class Foo < ActiveRecord::Base
    def self.sorted_by_sum_of_words
      order '(convert(word_one, unsigned) +
              convert(word_two, unsigned) +
              convert(word_three, unsigned))'
    end
end

次に、コントローラーで:

class FooController < ApplicationController
  def my_action
    @foos = Foo.sorted_by_sum_of_words        
  end
end

数値列に数値を格納する場合、変換は不要です。

于 2012-07-08T16:45:55.633 に答える