スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Ruby】ActiveRecordのfindメソッドでプレースフォルダ

ActiveRecordのReadを担うメソッドであるfindメソッドの検索オプションについて紹介しようと思います。

今回紹介するテーブルは曲の情報を管理するテーブルになります。

songs table
id        int(10)
title     varchar(256)
during int(10)
lyrics   varchar(1024)

id、曲のタイトル、再生時間(秒単位)、歌詞
を保持するという構成とします。

このテーブルにひもづくクラス構成は以下のようにします。

require 'rubygems'
require 'active_record'

class Song < ActiveRecord::Base
    set_primary_key :id
    set_table_name :songs
end

Song.establish_connection(
    :adapter => 'mysql',   
    :database => 'test'
)

早速findメソッドの:conditionsについて見て行きたいと思います。

まずは再生時間が57秒の曲を探してみましょう。

Song.find(:all, :conditions => "during = 57")

とすることで再生時間が57秒のレコードを探すことになります。

もう少しだけ実践的な例を見てみましょう。

セキュリティ的な観点でSQLインジェクションという攻撃を防ぐ必要があると思います。その一つの回避方法としてプレースフォルダという機能を使うことができます。

ActiveRecordでプレースフォルダを利用するには2通りの方法があります。

まず一つ目は'?'を使った記法になります。

:conditionsに渡すハッシュの第一引数に?を含むSQLを、第二引数以降に値を渡します。?の現れた順番と第二引数以降の値の順番が直接対応することになります。

上の例でもあげましたが引き続き再生時間が57秒のレコードを探してみます。

songs = Song.find(:all, :conditions => ["during = ?", 57])

ということになります。

さらに2つ以上の条件を組み合わせる例を見てみます。
再生時間57秒に加えて427秒の曲もあわせて探してみます。

Song.find(:all, :conditions => ["during = ? OR during = ?", 57, 427])

ということになります。一つ目の?に57が、二つ目の?に427が対応することになります。

ActiveRecordでプレースフォルダを利用する2つ目の方法を見て行きたいと思います。2つ目は名前付き記法に鳴ります。

SQL中に名前(シンボル表記)を入れた文字列を第一要素
その名前に値を対応させたハッシュを第二要素

にいれたハッシュを:conditionsに対応させることになります。

実例を見て行きましょう。

where = "during = :during OR during = :during2"
values = {:during => 57, :during2 => 427}
Song.find(:all, :conditions => [where, values])

というように指定をします。

また、どちらの記法の場合でも(?または名前)に配列を対応させることもできます。

Song.find(:all, :conditions => ["during IN (?)", [57, 427]])

のような書き方もできます。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Ruby  Trackback:0 comment:0 

プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。