2007-06-01から1ヶ月間の記事一覧

AR#==

ActiveRecordの==はどう動くのか気になったので調べてみた。 例えばSNSで日記にユーザからコメントがついた場合、新着に表示する時にはまず日記を書いたユーザとコメントを書いたユーザが別かどうかを判定しなきゃいけない。 早速ソースを読む。 def ==(comp…

HTTP POST ≒ request.post?

例えば以下のようにlink_toメソッドを呼び出してリンクを作成すると、HTTP的にはPOST扱いとなる。 link_to("削除", {}, :confirm => "削除する?", :delete) HTTPリクエストは以下のように発行される。 POST / HTTP/1.1 (中略) _method=deleteで、このリクエ…

Developmentモードのログを日毎にローテートする

RubyのLoggerは簡易的ながらもローテーションする事ができるのでそれを使えば簡単にローテーションを実現できる。 config/environments/development.rbに以下を追記すると日毎にローテーションするようになる。 config.logger = Logger.new(config.log_path,…

ActiveSupportに年月表示用のメソッドを追加する方法

以下をenvironment.rbに追加する。 ActiveSupport::CoreExtensions::Time::Conversions.class_eval do def to_yymm strftime("%y/%m") end end MySQLの場合はDateTime型がRubyのTime型にマッピングされるからTime型を拡張している。 YYMM形式で表示したいシ…

date_selectヘルパーの注意点

date_selectヘルパーは引数で渡したインスタンス名とメソッド名から年月日の選択状態を自動的に判断してくれて便利なのだけれど、インスタンスがローカル変数だと値を読み取ってくれず、常に最新の日付になってしまうと言う問題がある。 date_select(object_…

ちょっと便利なObject#blank?メソッド

ActiveSupportの拡張。 Stringでnilもしくは空文字列を判断する制御文がシンプルになる。 #before if str && !(str.empty?) #after unless str.blank? 実装はこちらを。 http://dev.rubyonrails.org/browser/trunk/activesupport/lib/active_support/core_ex…

ActiveHeartはどのようにカラム名の日本語化を実現しているか

Base.set_field_namesメソッドでは定義したカラム名と日本語名の対照用ハッシュ(@field_names)を作成する。 そして、ActiveRecord::Base#human_attribute_name(column_name)と言うメソッドをaliasにより独自メソッドに置き換え、引数のカラム名が@field_name…

Railsではアクション内にConst変数を宣言することができない?

以下のようなコードをアクションに書いたらシンタックスエラーになってしまった。 Item = Struct.new("Item", :value, :name) case type when 'select' item.new(0, "選択して下さい") when 'search' item.new(0, "すべて") else item.new(0, "すべて") end …

ARのWhere句を構築してくれるEz-Where pluginの次期版が良さげ

ARではWhere句を構築するのに結構手間がかかるので、いくつかpluginが公開されている。 http://d.hatena.ne.jp/yukiwata/20070524/1179977530 とは言うものの、どれも機能的には貧弱に見えたのでこれだったら我慢して直で書いちゃおうかな、と思っていたらez…