2017-05-02 4 views
-3

私は0と1の値を持つoptionというカラムを持っています。 このデータをyes/noでフォーマットしたいと思います。このクエリをRailsのモデルで使用する方法

これは

SELECT IF(option = 1, 'YES', 'No') AS Options FROM Table1 

私はWHERE句を使用してそれを行うことができ、私のクエリですか?

何かのように:私のようなものだろう

MyModel.where(option: 1).format_to_yes 
+2

何を達成したいですか? –

答えて

0

MyModel.pluck(:option).map { |o| o == 1 ? 'YES' : 'No' } 
1

ではなく、データベース層でデータを変更し、それが簡単になりますあなたのモデルにカスタムゲッターを簡単に作成できますフィールドの文字列値へのアクセス:

class MyModel < ApplicationRecord 
    def option 
    case read_attribute(:option) 
    when 1 then 'Yes' 
    when 0 then 'No' 
    end 
    end 
end 

また、3進またはトラを使用することもできます私はスイッチを使うのが好きです。なぜなら、何が起こっているのかがすぐに分かり、がなくても、何でも考えているからです。

MyModel.select("IF(option = 1, 'YES', 'No') AS Options") 

あなたはすべてのモデル属性をしたい場合(単にoptionない)、*を追加します:

MyModel.select("*, IF(option = 1, 'YES', 'No') AS option") 

お知らせ代わりにAS optionの使用を

+0

この場合、case文の代わりにハッシュを使うことができます: '{1 => 'はい'、0 => 'いいえ'}'。 – Ilya

+1

StackLevelに問題がありますか? 'option'は継続的に' option'を呼び出します – engineersmnky

+0

@AndreyDeinekoそれは私が扱った三元語です。 – coreyward

0

別の方法としては、このように、selectを使用することですAS Optionsには、1つだけoption属性を保持します。

関連する問題