ランプの中身(Ruby on Railsのシステム開発)
ランプの中身(Ruby on Railsのシステム開発)では、株式会社ケイビーエムジェイのRuby on Railsエンジニアが蓄積したノウハウを公開しています。Ruby on Railに関する技術解説や実践的なノウハウなど、開発現場の技術に則したコンテンツを随時追加していきます。 初心者の方でもわかりやすい技術解説を心がけています。リクエスト、ご質問も受け付けいますので、ご気軽にコメントを記述して下さい。

< fastladderをrailroadで... | メイン | Railsの開発でscreenを使う理由... >

zenpouの中身(Ruby
2008.02.16

ActiveRecordのconditionsを綺麗に書くTips2つ


高瀬です。

Railsで開発してる 人は一部の例外(RubyでActiveRecordを使わないでDBに接続する方法)を除いてactiverecord(AR)で
DBを検索すると思います。
 
今回はARでDBの検索をする際に綺麗に書けるようになるtipsです。

1.conditions句をシンボル使ってDRYに書く

conditions句って実はシンボル使えるらしいのです。

最近まで知りませんでした。

というわけで、?だと

:conditions =>["(prefecture_id = ? and user_id = ?)  or (other_prefecture_id = ? and other_user_id = ?)",  11, 2, 11, 2]

 と、分けわかんなくなっちゃう様な検索文を

:conditions =>["(prefecture_id = :prefecture_id and user_id = :user_id)  or (other_prefecture_id = :prefecture_id and other_user_id = :user_id)", {:prefecture_id => 11, :user_id => 2}]

っていう書き方ができます。

 

2.ヘルパつかってみる。 

こんなライブラリとかをつかいます。

module ActiveRecordHelper
def flatten_conditions(conditions, op = "and")
return nil if conditions.empty?
ps = []
condition = conditions.collect do |c|
next if c.size < 1
ps += c[1..(c.size)]
"( #{c[0]} )"
end.delete_if { |c| c.blank? }.join(" #{op} ")
[condition, ps].flatten unless condition.empty? end
end

class ActiveRecord::Base
include ActiveRecordHelper
end

 

そーすると

 

@condition = []

@condition << [" prefecture_id = ? ", params[:prefecture] ] if params[:prefecture]

@condition << [" sex = ? ", params[:sex] ] if params[:sex]

  @users = User.find(:all, :conditions => @conidition)

こういう風に、配列にガシガシ追加するだけーという検索条件の追加の仕方ができます。

コメント (0)  |トラックバック (1)

ブックマークに追加する Subscribe with livedoor Reader あとで読む

トラックバック URL

トラックバック一覧

[ruby][rails_tips][rails]ActiveRecordで最近知ったtipsとか
ActiveRecordのconditionsを綺麗に書くTips2つ(doruby)に書いてみた。 以前書いたActiveRecordでパラメータでconditions条件を追加しやすいヘルパ と... [続きを読む] posted from zenpouの日記 2008.02.16 12:27

この記事にコメントする

ニックネーム:
メールアドレス:
URL:


KBMJのWebソリューション
Ruby on Rails Summer Festival 2008開催決定!!

TOPICS

2008/06/25
ZD Net Builder」の連載記事です。第四回は「Rubyでどう書く?:重複したRSSをまとめる」が掲載されました。

2008/05/30
ZD Net Builder」の連載記事です。第三回は「Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する」が掲載されました。

2008/05/07
ZD Net Builder」に連載を始めました。第二回は「Rubyでどう書く?:RubyでPDF履歴書を作成する」が掲載されました。

2008/04/24
アットマーク・アイティ」に『 Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する』が掲載されました。

全体のRoR最新ブログ一覧

プロフィール

  • zenpou
  • 1. 名前: たかせゆういち
    2. blog: http://d.hatena.ne.jp/zenpou
    3. 年齢: 24くらい

    Railsについて

    1. KBMJでRailsの開発をやっています。
    2. 小江戸らぐというユーザーグループで、毎月Railsの勉強会の講師をしています。。

    開発環境とか

    1. Windows Vista(ノート) と Windows XP(デスクトップ)を2台並べてます。(synergyで連動)
    2. でも、実際に開発する場合、ネットに繋がってたらLinuxにPuttyで接続して開発。
    3. ネットに繋がってない場所だと、ローカルのcoLinux上にPuttyで接続して開発。
    4. 開発に使うLinuxは、ディストリは余り気にしないけど、debianとCentOSとFedora。
    5. Linux上でzsh + screen で開発します。screenで画面切り替えながらログをtail -fしたり、ruby script/consoleしたり、mysqlしたり。
    6. エディタはvim使ってます。

ブログの購読

RSS

timelog
株式会社ケイビーエムジェイロゴ