おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

RailsでURLパラメータにactionが存在したときの対処方法

 Railsで、URLパラメータにactionという名前が使われていると、controllerのactionと名前がかぶってしまって、うまくルーティングができなくなります。もちろん、そんな名前のパラメータを使わなきゃいいんだけど、昔のシステムでそんなURLを使っていて変更できないときなんかは困ったことになります。
 そんな場合は、config/routes.rbで

  map.connect ":controller/:method_name/:id", :controller => "Sample", :action => "router"  

みたいな感じにして、SampleControllerで

  def router  
    if request.url =~ /\?.*action=([^&]+)&*/  
      @param_action = $1  
    end  

    if self.public_methods(false).delete_if{|a| a == "router"}.include?(params[:method_name])  
      eval(params[:method_name])  
    else  
      (エラー処理)  
    end  
  end  

としてやれば、とりあえずなんとかなります。他にもっといい方法があるかもしれません。