schema_commentsアップデート

マイグレーションで、テーブルやカラムにコメントを記述することによって、db/schema.rbをテーブル定義書のようにしちゃうプラグインschema_commentsですが、テーブル、カラムのコメントをI18n用のYAMLにコメントを反映できるrakeタスクを追加しました。
http://github.com/akm/schema_comments

rake i18n:schema_comments:update_config_locale

と一発打つだけで頑張ってマイグレーションに書いていたコメントがモデル名/属性名としてYAMLに反映されます。

これができると、マイグレーションで書いたコメントがそのまま日本語リソースとして使えちゃったりします。
これまではエラーメッセージくらいにしか使われていなかったのですが、Rails2.3.4から labelヘルパーメソッドがi18n対応したそうで、labelを使ってもその翻訳を第2引数に渡す必要があったのですが、その必要もなくなります!これはすごい。この辺については詳しくはこちらのエントリが詳しいです。
http://www.oiax.jp/rails/zakkan/rails_2_3_4_and_i18n.html

追記

いえーい、って思って実際labelに反映されるかどうかを試してみたら、英語のまんまじゃーん!!ソース見たらhumanizeを使う実装のまんま。チケット#745( https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n )をよく見たら、一番最後に

Milestone changed from “2.3.4” to “2.3.5”

と書いてある。

悔しかったので、チケットにあったパッチをざっくり適用するモンキーパッチを書いた。

unless ActionView::Helpers::InstanceTag.instance_methods.include?('to_label_tag_without_i18n')
  ActionView::Helpers::InstanceTag.class_eval do
    def to_label_tag_with_i18n(text = nil, options = {})
      options = options.stringify_keys
      tag_value = options.delete("value")
      name_and_id = options.dup
      name_and_id["id"] = name_and_id["for"]
      add_default_name_and_id_for_value(tag_value, name_and_id)
      options.delete("index")
      options["for"] ||= name_and_id["id"]
      if text.blank?
        content = object.class.respond_to?(:human_attribute_name) ? object.class.human_attribute_name(method_name) : method_name.humanize
      else
        content = text.to_s
      end
      #content = (text.blank? ? nil : text.to_s) || object_name.classify.constantize.human_attribute_name(method_name)
      label_tag(name_and_id["id"], content, options)
    end
    alias_method_chain :to_label_tag, :i18n
  end
end

僕みたいに2.3.5まで待ちきれないという人はこれをapp/controllers/application_controller.rbの最後にでも追加しておくと良いでしょう。