2012/04/07

削除されたものも検索したい時 「unscoped」を使う

論理削除とか使ってたりするときね

class Diary < ActiveRecord::Base
  # 論理削除
  default_scope where(:deleted_at => nil)


削除されたものも検索したい時 「unscoped」を使う
  # いつもの検索 deleted_at is null がSQLに付く
  Diary.find(:all, :conditions=>["id=?", id], :order=>"updated_at DESC")
  # 削除あり検索
  Diary.unscoped.find(:all, :conditions=>["id=?", id], :order=>"updated_at DESC")

ActiveRecordオブジェクトを そのままハッシュに入れたい時

 ActiveRecord(AR)オブジェクトは
各オブジェクトごとの値を attributes っていうHashで保持しているらしい

  user = User.find_by_user_id(params[:user_id])
  logger.debug(user.to_yaml)#←中身デバッグ

・DEBUGは↓こんな感じ
[DEBUG] --- !ruby/object:User
attributes:
  id: '1'
  name: username
  deleted_at: !!null 
  created_at: '2012-04-07 03:32:09'
  updated_at: '2012-04-07 13:41:55'
changed_attributes: {}
previously_changed: {}
attributes_cache: {}
marked_for_destruction: false
destroyed: false
readonly: false
new_record: false


attributesは
1件しかないARオブジェクトだったら
→ user.attributes

複数取れるARオブジェクトだったら
(プライマリキーで取得できる件数が必ず1件だったとしても find(:all 〜 とかで取得するとこっちになると思われ)
→ user[0..N].attributes

MacOSで アプリケーションごとに入力言語を保つ

MBA使い始めて 何がうざいって
ターミナル使ってて テキスト編集で日本語入力して、
また、ターミナルへ戻ったら
なぜかターミナルも日本語入力状態になってること

というか、Macでは入力言語の切り替えが なぜか全てのアプリで共通になるんだよね
これがデフォルトだなんて なんなんですかいったい
使いにくくてしょうがなくて やっと対処法を見つけた

システム環境設定 → 言語とテキスト → 入力ソース
 ・入力ソースのオプション
  → 書類ごとに異なるものを使用 に、チェック

やっとすっきりしたー!




参考)
http://blog.stack-style.org/2009-09-26-03/Mac%20OS%20Xメモ:アプリケーションごとに入力ソースの状態を切り替える

2012/04/06

PHP 5.2.5 json_encode()・json_decode() マルチバイト文字列誤変換


PHP 5.2.5のjson関数で、一部の文字列(中国語でUnicodeのU+2000Bを含む文字列)をエンコードして、デコード処理しようとすると、元の文字に正常に変換されないバグがあるらしい
・バグ報告
・PHP 5.2.x
 - PHP 5.2.10 json別件修正
★PHP 5.3.xでは問題解消されてる(PHP 5.2.10リリース以後にPHP 5.3.0リリースされた)



2012/04/04

grepコマンド


◎指定のディレクトリ配下を 再帰的に検索する
→ DIR_PATH配下で「hogehoge」と書かれているファイルを探す
grep -r -n "hogehoge" DIR_PATH --color=auto
◎ファイル内の文字検索
grep -r [string] [path]
ex)grep -r "HOGEHOGE" .
◎検索文字列をハイライト(--color=auto)
ex) tail -f /var/log/hoge.log | grep --color=auto "HOGE HOGE"