ruby

iconvライブラリではまったこと。

Rails-1.2.6で、ActionMailerを使って日本語(iso-2022-jp)でメール送信する場合は次のようにすればよいのだが、僕の環境では長〜〜い本文を送ろうとするとエラーになるという現象が発生した。 class Notifier iso-2022-jp?B?#{Base64.encode64('グリーティン…

独自のValidationを実装する(1.2.6)

RailsでのValidationはModelに対して実装する(その賛否については記事にしたい)が、標準のValidatorというかvalidates_*ヘルパーメソッドがいくつか用意されている。しかし、意外にアプリを作っているとかゆいところに手が届かないことが多いのだ。というこ…

has_many関連にfind_sqlを指定した場合の注意

ActiveRecordでhas_many関連の抽出にSQLを指定したい場合、:find_sqlシンボルをキーにSQL文を指定することができる。もちろん、has_manyなので、自身のモデルに関連するオブジェクトを抽出したいはずなので、自身のid(オブジェクトidではない)をSQL文に渡し…

特異なんとか

特異クラス、メソッドについて存在は知っていたが、どんなときに使えばよいのかあまりピンとこなかった。で、今、タイムリーに思いついたネタを試してみたのでログ。例えば、日付(date)とか時刻(time)をString型で持つ場合に、年、月だけとか、年月だけとか…

トランザクションの分離レベル

railsに置いてトランザクションを実行するにあたって、分離レベルの設定方法がわからなくて調べてみた。ソースを追ってみると、どうも各DBMSのアダプタ実装に依存するようだ。 # ./rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.…

Rails2.0では、controller名が複数形になった。

scaffoldをgenerateしていてふと気がついたのですが、Rails2.0だとscaffoldを生成したときにできるコントローラが複数形になります。例えば、 $ ./script/generate scaffold person とすると、people_controler.rbができちゃいます。Rails1.2だとこんなこと…

ActiveRecordのアソシエーションについて

ActiveRecord(以下、AR)の関連について、直感的なようで直感的でない感じがしていて、どうもあいまいな理解になっていたので、頭の中を整理してみました。結論から言うと、次のようなルールで整理できました。(ルールは上から順に適用し、マッチしたら終わる…

ActiveRecordでidを文字列にしたい

railsの作法で、「idはint型でautoincrementなもの」なのかもしれませんが、例えば、都道府県マスタみたいなのをテーブルで持っておきたいような場合、私は、varcharで"01", "02"みたいなキーを振りたい派なのですが、こんな場合もidと都道府県コードを別に…

ログの取り方

いろいろ調べたのですが、AWADにしっかり書いてたよ。。railsアプリのコードからはいつでもどこでも次の方法でログを吐くことができる。 logger.info logger.warn logger.error logger.fatal デフォルトでは、deveopment環境であれば、log/development.logに…

model(active record)のコンストラクタで属性を初期化する

何も考えずに、この様にしようかなと思いましたが、 def initialize(my_attr) super # これであってるのか? @my_attr = my_attr end ... my = MyActiveRecord.new(my_attr) active recordだと、こうやるのが正しいのかな my = MyActiveRecord.new(:my_attr …

テスト用テーブルのセットアップ

> rake db:test:prepareこれだけで、migrationに設定した内容でテスト用テーブルもセットアップしてくれる。便利だよ。rails

created_onとupdated_on

MySQL使っていて、更新日時をtimestamp型にしたいなぁと思って探していたら、column_nameをcreated_onにすると作成日時を、updated_onにすると更新日時を勝手に挿入してくれるらしい。ちなみに、created_atとupdated_atでも良いらしい。 create_table :produ…