rails:url
railsのURL
Rails v2.1
URL設定は config/routes.rb に書く
現在のURL設定は
rake route
で見る。
URLは基本的にlink_toメソッドに作らせる
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