【ruby】if文の使い方
ifは「もしも」という日本語訳通り、「もしも◯◯なら、〜の処理をする」という意味で、条件分岐処理をする時に用いられます。
if文の書き方の基本は、次の通りです。
i = 10 if i == 10 puts “iは10です” else puts “iは10ではありません” end
「i == 10」とは、「iは10と等しい」という意味であり、この条件に合致していると、「iは10です」が出力されて、違っているなら「iは10ではありません」が出力される、というプログラムです。
上の例では、「i = 10」ですから、「iは10です」が出力・表示されます。
ifを使えば、例えばユーザーに入力してもらった値に応じて処理内容を変えるといったことが可能になります。
ユーザーの年齢を聞く処理を事前に行い、入力した内容を変数に代入。その変数を条件式で判定し未成年であれば処理を行わず、20歳以上なら酒類を購入できるページに遷移させる、というプログラムも組むことができます。
ifの中でさらに条件を定めて複雑に分岐させることなどもでき、様々な場面で応用していくことができます。
【Rails】whereメソッドを使って指定したレコードを取得する方法
whereは条件に合うモデルを複数取得したい場合に使います。
引数には連想配列を渡します。
# addressが"tokyo"のuserを全て取得 users = User.where(address: "tokyo") # addressが"tokyo"かつ、genderが"male"のuserを全て取得 users = User.where(address: "tokyo", gender: "male")
戻り値はActiveRecord::Relationというオブジェクトです。ActiveRecord::Relationというのは簡単に言えばモデルの配列なのですが、単なる配列ではありません。
whereメソッドは戻り値がActiveRecord::Relationであるおかげで、非常に便利な使い方ができます。チェーンメソッド形式でさらに条件を絞り込むような使い方ができます。
【Rails】find/find_byメソッドを使って指定したレコードを取得する方法
find
findメソッドはテーブルの中からidを指定してモデルを取得したい場合に使います。
引数に渡せるのはidあるいは、idの配列。
# idが1のuserを取得 user = User.find(1) # idが2と3のuserを取得 users = User.find [2, 3]
idを1つだけ指定した場合は戻り値はモデルオブジェクトであるのに対して、idを配列で渡した場合は戻り値は配列(モデルオブジェクトの配列)になります。
# idが1のuserを取得 user = User.find(1) user.name # idが2と3のuserを取得 users = User.find [2, 3] users[0].name users[1].name
指定したidのモデルが存在しなければArgumentError(例外)が投げられるので注意が必要です。
find_by
find_byメソッドは、条件を指定してモデルを1件だけ取得したい場合に使います。
# idが1のuserを1件取得 user = User.find_by(id: 1) #nameが"taro"のuserを1件取得 user = User.find_by(name: "taro") #nameが"taro"かつ、addressが"tokyo"のuserを1件取得 user = User.find_by(name: "taro", address: "tokyo")
find_byメソッドで取得できるのは1件のみです。もし条件に合うモデルが複数あった場合は最新の1件が取得されます。
指定したモデルが見つからない場合は戻り値はnilになります。