すべて数値である複数の文字列があります。それらはすべて同じ db テーブル内にあります。それらをすべて結合して最大数でソートする方法はありますか?
(疑似コード) のようなもの:
:include => :word_one_value, :word_two_value, :word_three_value, :sort_by => "sum ASC"
すべて数値である複数の文字列があります。それらはすべて同じ db テーブル内にあります。それらをすべて結合して最大数でソートする方法はありますか?
(疑似コード) のようなもの:
:include => :word_one_value, :word_two_value, :word_three_value, :sort_by => "sum ASC"
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
数値列に数値を格納する場合、変換は不要です。