URLとコントローラ・アクション、ビューの関係

Ruby on RailsでのURLとコントローラ(controller)・アクション(action)、ビュー(view)の関係は次のようになっています。

http://localhost:3000/【コントローラ名】/【アクション名】

アクセスされるファイル

コントローラapp/controllers/【コントローラ名】_controller.rb
ビューapp/views/【コントローラ名】/【アクション名】.html.erb
app
 ├ controllers
 │└ 【コントローラ名】_controller.rb
 └ views
  └ 【コントローラ名】
   └ 【アクション名】.html.erb

アクセスされるメソッド

class 【コントローラ名】Controller < ApplicationController
  def 【アクション名】

  end
end

http://localhost:3000/

public
 └ index.html

標準ではドキュメントルートのindex.htmlが呼ばれます。

ファイルの拡張子からわかるように、このファイルは静的なものになります。
動的にするには、このindex.htmlを削除するのですが、削除すると次のようなエラーが出ます。

Routing Error
No route matches "/" with {:method=>:get}

コントローラ、ビューを通し動的にするにはconfig/routes.rbに次のように書き、ルートでのアクセスの場合の定義をする必要があります。

ActionController::Routing::Routes.draw do |map|
  map.root :controller => '【コントローラ名】', :action => '【アクション名】'

  ………
  ……
end
app
│├ controllers
││└ 【コントローラ名】_controller.rb
│└ views
│ └ 【コントローラ名】
│  └ 【アクション名】.html.erb
└ config
 └ routes.rb

http://localhost:3000/【コントローラ名】/【アクション名】/【パラメータ】

Railsでは、GETクエリによって値を渡さなくても、スタティックなURLを偽装してパラメータを渡すことができます。

config/routes.rbは次のようになります。

ActionController::Routing::Routes.draw do |map|
  map.connect ':controller/:action/:id'
end

このようにするとパラメータはコントローラ内で次のようにして受け取れます。

params[:id]

http://localhost:3000/【名前空間名】/【コントローラ名】/【アクション名】

Rails 2.0.2以降、map.resources に名前空間を付けることが可能です。 名前空間(namespace)を使用することでアプリ階層が整理しやすくなります。 具体的には、機能をディレクトリにまとめるということができます。

アクセスされるファイル

コントローラapp/controllers/【名前空間名】/【コントローラ名】_controller.rb
ビューapp/views/【名前空間名】/【コントローラ名】/【アクション名】.html.erb
app
 ├ controllers
 │└ 【名前空間名】
 │ └ 【コントローラ名】_controller.rb
 └ views
  └ 【名前空間名】
   └ 【コントローラ名】
    └ 【アクション名】.html.erb

アクセスされるメソッド

class 【名前空間名】::【コントローラ名】Controller < ApplicationController
  def 【アクション名】

  end
end

関連記事

スポンサーリンク

キャッシュを有効にする

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る