条件に一致するデータを取得する(複数)
class TestController < ApplicationController def index @persons = Person.where(age: 20) end end
<table> <th>名前</th> <th>年齢</th> <% @persons.each do |person| %> <tr id="<%= person['id'] %>"> <td><%= person['name'] %></td> <td><%= person['age'] %></td> </tr> <% end %> </table>
条件に一致する複数のデータを取得したいときは
の形式で記入します。
whereメソッドで取得時は複数のデータとなるため、each文で繰り返し処理を行う必要があります。
上の例ではテーブルの行のidをデータのidにしてそれぞれname属性、age属性を表として表示しています。
whereメソッドでは一致以外にも以上、以下などでも設定することができ、
のように記入するとPersonモデルのageフィールドが20以上のデータを取得することができます。
変数の値と比べてデータを取得したいときは
のように記入してください。
age >= ? の?の部分にwhereメソッドの第2引数のageの値が代入されて処理が行われます。
また、whereメソッドでは複数の条件に一致もしくはどれかの条件に一致しているデータを取得することもできます。
のように記入するとageフィールドが20以上でnameフィールドがtestのデータを取得することができます。
whereメソッド内では?が複数あるときは第2引数から順番に当てはめられていきます。
のように記入するとageフィールドが20以下もしくは30以上のデータを取得することができます。
モデル.where(フィールド: 値)
の形式で記入します。
whereメソッドで取得時は複数のデータとなるため、each文で繰り返し処理を行う必要があります。
上の例ではテーブルの行のidをデータのidにしてそれぞれname属性、age属性を表として表示しています。
whereメソッドでは一致以外にも以上、以下などでも設定することができ、
@persons = Person.where("age >= 20")
のように記入するとPersonモデルのageフィールドが20以上のデータを取得することができます。
変数の値と比べてデータを取得したいときは
age = 20
@persons = Person.where("age >= ?", age)
@persons = Person.where("age >= ?", age)
のように記入してください。
age >= ? の?の部分にwhereメソッドの第2引数のageの値が代入されて処理が行われます。
また、whereメソッドでは複数の条件に一致もしくはどれかの条件に一致しているデータを取得することもできます。
row = 20
name = 'test'
@persons = Person.where("age >= ? and name == ?", row, name)
name = 'test'
@persons = Person.where("age >= ? and name == ?", row, name)
のように記入するとageフィールドが20以上でnameフィールドがtestのデータを取得することができます。
whereメソッド内では?が複数あるときは第2引数から順番に当てはめられていきます。
row = 20
high = 30
@persons = Person.where("age <= ? or age >= ?", row, high)
high = 30
@persons = Person.where("age <= ? or age >= ?", row, high)
のように記入するとageフィールドが20以下もしくは30以上のデータを取得することができます。