showアクションを文字列で

rails3

普通のRailsアプリなら数字でリクエストを送るけど文字列で送りたい。

RedmineのProjectsController#showで同じことやっていたので、ソースを追うとfindメソッドを上書きしてた。

  # app/models/project.rb 
  def self.find(*args)
    if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)                                                                                 
      project = find_by_identifier(*args)
      raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
      project
    else 
      super
    end
  end  

この手のことやるのにgemあるけど、普通にオーバーライドしたほうが楽な気がする。
ARの仕様が変わった時に備えてテスト書いておけば心配はいらないですしおすし。

それと、このユニークな文字列を入れておくカラムの名前はidentifierがあるあるなのかな。