ユーザ用ツール

サイト用ツール


rails:url

railsのURL

Rails v2.1

URL設定は config/routes.rb に書く

現在のURL設定は

rake route

で見る。

URLは基本的にlink_toメソッドに作らせる

  • :anchor : アンカー(#hogehogeのhogehoge)を設定
  • :only_path : falseにするとFQDNを作る。trueの場合サーバルート相対パスを作る。デフォルトtrue
  • :host : ホスト名を指定、FQDNでなくてはならないのでonly_pathをfalseに
  • :popup ⇒ true : サブウィンドウを開いて表示
  • :protocol : https、httpなどのプロトコルを指定。httpのページでhttpsにリンクを貼りたい場合は、FQDNでなくてはならないのでonly_pathをfalseに
  • :confirm ⇒ “メッセージ” : 確認ダイアログボックスを出す。

routes.rb

ActionController::Routing::Routes.draw do |map|
  # モデルhogeに対応するrestfulでCRUDのURLを設定する
  map.resources :hoges
end

一対一、一対多モデルに対応したURLを作る

以下のような一対一、一対多のモデルがあるとき…

class Parent < ActiveRecord::Base
  has_one :alonechild
  has_many :manychilds
end
 
 
class AloneChild < ActiveRecord::Base
  belongs_to :parent
end
 
 
class ManyChild < ActiveRecord::Base
  belongs_to :parent
end

routes.rbに以下の設定すると…、所有リソースの追加メソッドと対応URLが作成される

ActionController::Routing::Routes.draw do |map|
 
  ...
  # この2行を追加
  map.resource :parents :has_many => manychilds
  map.resource :parents :has_one => alonechild
end

erbで

<%= link_to "リンク1", new_parent_manychild_path(@parant) %>
<%= link_to "リンク2", new_parent_alonechild_path(@parent)  %>

レンダリング結果

<a href="/railsroot/parents/1/manychild/new">リンク1</a>
<a href="/railsroot/parents/1/alonechild/new">リンク2</a>

呼び出されるコントローラはそれぞれ

  • ManyChildsController#new
  • AloneChildsController#new

URLを個別に設定

たとえばモデル hoge が画像パスを持っていて、対応する画像データを削除するアクションメソッドremoveを作ったとする

class HogesController
  def remove
    # 画像削除処理を書く
    @hoge = Hoge.find(params[:id])
    if File.exists @hoge.image_path
      File.unlink @hoge.image_path
    end
    @image_path = nil
    @hoge.save
  end
end

何も設定しないとURLは

hoges/remove/1

となるが、意味が分かりにくいURLなので

hoges/1/image/remove

というURLにしたい。

この場合は、routes.rbに

ActionController::Routing::Routes.draw do |map|
  map.connect 'hoges/:id/image/remove', :controller => 'hoges', :action => 'remove'
end

という設定を加える。

このときrake routesを行うと…

/hoges/:id/image/remove                       {:action=>"remove", :controller=>"hoges"}

という行が加わっているのが分かる。

このhoges/1/image/remove というURLをビューのlink_toメソッド作るには、

<%= link_to '画像を削除', {:controller => :hoges, :id => @hoge, :action => :remove}, :confirm => '画像を削除する?' %>

とすれば良い。:controllerは省略しても良いようだ。

rails/url.txt · 最終更新: 2008/09/06 01:34 by 127.0.0.1