Ruby

ensure節の値は無視される

何回か読んでいてわかっているはずなのにまたやってしまったので、忘れないように書いておきます。 間違った例 def wrong_case hs = {} hs[:login] = "123" hs[:email] = params[:user][:email] # params[:user]==nilだと例外発生 hs[:ipadr] = "127.0.0.1" …

クラスのメソッド

クラスメソッドとインスタンスメソッドがわかっているようで、いつの間にかあやふやになってしまうので後で迷わないように整理しておく。 インスタンスメソッド class User ActiveRecord::Base def not_using_openid? identity_url.blank? end end User.new.…

ケアレスミス

カンマに注意 hs = {} hs["1"] = "11" hs["2"] = "22", hs["3"] = "33" hsは、{"1"=>"11", "2"=>"22", "3"=>"33"}を期待しますが、こんなふうに文末に余計なカンマがあったりすると、{"1"=>"11", "2"=>["22", "33"], "3"=>"33"}になってしまいます。Ruby恐ぇ…

番号文字列をインクリメントする

"Z10-036K"みたいな文字列があったとして、"Z10-999K"の次は"Z11-000K"になってほしいよねということで書いてみました。 ソース(というほどのものではない) Stringクラスに defineするので既存のメソッドをオーバーライトしないように、なるべくダサい名前…

NetBeansのインストール

子供の入院や自分自身の風邪やなんやらでずいぶん間が空いてしまったので、リハビリを兼ねて最近 6.5が出た NetBeansをインストールしてみることにします。 JDKのインストール JDKはインストールしておいた方がいいそうです。 http://java.sun.com/javase/ja…

Hpricot::ParseErrorが出たときは?

Hpricotを便利に使っていますが、ページを読んだときにエラーが出るようになってしまいました。rescueはかけてあるのですが、例外に飛ばずにドカンと落ちてしまいます。 現象 c:/ruby/lib/ruby/gems/1.8/gems/hpricot-0.6-mswin32/lib/hpricot/parse.rb:51: …

rescue、ensureでの注意

あまり意識して使っていなかったのですが、意識せざるをえない状況になってしまったので、あとで「あれって何だっけ?」とならないためのメモを書いておきます。 例外処理を使うときの注意 こういうことはわりとよくやると思います。(こんな単純なことはさす…

正規表現のパターンを変数に入れる

いつもいつも「あれ?どうやるんだっけ?」と悩んでググったり、irbで試したりしてしまうので、ここに書いておくと忘れないんじゃないかと。 いろいろなケース irb> ptn = '^http://.+?/' ← URIのルートを取ってくるパターン => "^http://.+?/" irb> uri = "…

CMDのコードページには気をつけろ!

WindowsでWEBアプリを作っていると「縺ョ邨・ォ九※」みたいな画面表示で気が滅入ること、ありませんか? そんなときは「chcp 65001」とやって、UTF-8 表示にするわけですが(フォントは事前に「MS ゴシック」にしておくこと)、ruby-debug を使っていてちょっと…

Ruby Enterprise Editionを入れてみる

Passengerの開発元から「Ruby Enterprise Edition」が出たそうなので早速入れてみることにします。「Railsアプリのメモリ使用量が平均33%少なくなる」らしいし、安定していて速いということですから本当なら万々歳ですね。 インストール 手順は次の通り。エ…

UbuntuでのMySQLのWARNING

UbuntuのRailsログを見ていたら、ここ(→http://d.hatena.ne.jp/satake7/edit?date=20080509)にあったのと同じWARNINGを発見。Windows環境だけじゃなかったんだということで、Ubuntuでも対処することに。WARNING内容はこちら(↓) WARNING: You're using the Ru…

Hpricotのインストール

Windows環境で作っている Webサービスをそろそろ Ubuntu の方で動かそうかなと思って、subversion のリポジトリから最新をチェックアウトして、とりあえず WEBrick で動かしてみようとすると、「Hpricot がない」というエラーを吐くので、Hpricot をインスト…

〜の扱いについて

いまだに日本語のコード変換絡みで問題が残っているだなんて思いもよらなかったんですが、まだいくつか注意してやらないといけないんですねぇ。その辺りの問題は10年以上前からあったはずなので、もういい加減そんなことはと思っていたので、ちょっとびっく…

動作中のログをとる

debugger で止めて、p ??? で変数の内容見て、c で次の debugger へ、なんてことをやってましたが埒があきません。ちゃんとログとって見るべきです。 Rubyでのloggerの超簡単な使い方 require 'logger' class Hoge def initialize @log = Logger.new(STDOUT)…

RubyとERBのコメント

Railsをしばらく触らないと忘れてしまいそうなのでメモ Rubyのコメント # ...コメント...# 以降の行末までがコメント =begin...コメント...=end=begin と =end の間の行はすべてコメント。=begin と =end は1カラム目から(先頭にスペースがあっちゃダメ) ERB…

to_int に気をつけろ!

以下の長ったらしい文章の要点は「不用意に既存クラスにメソッドを追加すると、とんでもないところでエラーになるので要注意」ということです。RailsでWebアプリを作っていたと思ってください。最近はそれしかやってませんから。で、だんだんRubyにも慣れて…

ループ(繰り返し)

Rubyに慣れてくると each{} ばっかり使っているような気がしますが、とりあえず1回実行して後で評価する、Cでいうところの do {} while を使いたいときもたまにあります。そういうときのためのメモ。 まず、ループのまとめ for 文for 変数 in オブジェクト d…

シンボルに注意

Railsでは HashWithIndifferentAccessクラスがよしなにやってくれるので、:idでも"id"のどちらでもいいんだけど、自分で作った Hashはそういうわけにはいかないので、ちゃんと意識して使いましょう。シンボルと文字列は違います。 「文字列」=「シンボル」.…

to_iの振舞い

"123".to_i => 123 これは予想通り。 "123xx".to_i => 123 数字として判断できるところまで判断してくれるのか。 "xx123xx".to_i => 0 さすがに前に付いた数字じゃないものはカットしてくれないよね。 nil.to_i => 0 これが例外にならないのは注意! false.t…

変数への代入に気をつける

Rubyの変数へのオブジェクトの代入は、オブジェクトへの参照ができるようになるだけ(オブジェクト自体はコピーされない)ということは知識としてはわかっていたのですが、いままでそのことを意識しなくても特に問題がなかったので、Cみたいにポインタ参照なの…

メソッドの'()'に気をつける

Hpricotを使ってて、どう考えてもメソッドが使えるはずなのにエラーになるということがあって、小一時間*1>ほど悩みまくり。もう同じことで悩まないとは思うが、念のため記録しておく。 エラーになるケース irb(main):137:0> (doc/:Item).each {|item| p (it…

nil?またはempty?を判定する

変数が nil? または empty? を判定するには、blank? を使う。 blank? params[:item] = default_item[''] if params[:item].blank? params[:item]が定義されていない(nul)か、空っぽ(empty)だったら初期値をセットする。 注意 params[:item][:key]の blank? …

クラス名を調べる

変数のクラスはなんだっけということがたまにあって、そういうときは「irb」で確認してたんだけど「pp hoge.class」とやるとエラーになるって初めて知った。(「require 'pp'」せずに普通に使ってたから) irb(main):011:0> pp h.class NoMethodError: undefin…

メソッドから複数の戻り値を返す

メソッドを書いてて、return値の他に文字列も返したいよね、Cだったら文字列引数にそのままセットしちゃうとこだよな、ということがあります。 そういうとき、Rubyでは、Arrayを返すことで複数の戻り値を返すことができます。 return 1, "2a", 3 return [1, …

irbを入れる

Rubyを入れたから、てっきり一緒に入っているのかと思っていた「irb」ですが入っていなかったので入れときます。 インストール xxx:~$sudo apt-get install irb [sudo] password for xxx: 以下のパッケージが新たにインストールされます: irb アップグレード…

Rubyを入れる

WindowsではAptana Studioを入れたときにRubyとRailsも一緒に入れたんだけど、Ubuntu Serverでは初めてなので、変なバージョンが入らないように注意深く入れることにする。 インストールの確認 $ dpkg --list ruby ruby に一致するパッケージが見つかりませ…

load(require)ってどういうことになってるのかな?

requireとloadの違い requireは拡張子(.rb)を付けなくてもよい。loadは付けないとだめ。 requireは1回ロードされると2回目以降はロードされない。loadは毎回ロードされる。 loadは上書き? Classをrbファイルに書いてそれを修正しつつ、動作をコンソールで確…

irbを使ってみる

1.irbを使う ちょっと動作を確認するのにAptana Studioをいちいち起動するのはどうなのよと思ってirbを使ってみた。 C:\ruby>irb -Ks irb(main):001:0> "ほげ" => "ほげ"最初にはまったところ。"ほげ"を打つのに、""を先に打ってから←キーで戻って、ほげと…

Ruby、Railsを入れる

1.Ruby本体のインストール ここ(→http://rubyforge.org/projects/rubyinstaller/)からOne-Click Installer - Windowsパッケージ(1.8.6-26 Final Release)をダウンロードする。インストールはデフォルトのままだと、C:\Rubyにインストールされる。環境…