Ruby on rails で MVC パターンを表すシーケンス図を描いてほしいと依頼されました。シーケンス図は「オブジェクト図」であるため、モデル、コントローラー、ビューはオブジェクトである必要があります。Ruby on railsにはモデル、コントローラーのオブジェクトがありますが、レールに「ビューオブジェクト」はありますか?
1 に答える
Rails のビュー オブジェクトはそこにありますが、テンプレート インフラストラクチャの背後に隠されています。
コントローラー オブジェクトのアクション メソッドがページをレンダリングする場合 (明示的に呼び出すrender
か、暗黙的に返すことにより)、Rails インフラストラクチャは のサブクラスを呼び出し、テンプレートとコントローラーに設定されたインスタンス変数ActionView::TemplateHandlers
を渡します。.erb
テンプレート ハンドラーは HTML ビットを解析し、タグに埋め込まれたルビ ビットを見つけて<% %>
、そこからオブジェクトを構築します。次に、オブジェクト内のメソッドを呼び出してレンダリングを行います。ビュー内のコードにエラーがある場合に生成されるスタック トレースで、この証拠を確認できます。<% 0 / 0 %>
ビューに入れて、以下のエラーを生成しました。
divided by 0 (ActionView::Template::Error)
./app/views/home/index.html.erb:9:in `/'
./app/views/home/index.html.erb:9:in `block in _app_views_home_index_html_erb___2383790952439350653_70222507697420'
/Users/dpassage/.rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.11/lib/action_view/helpers/capture_helper.rb:40:in `block in capture'
/Users/dpassage/.rvm/gems/ruby-1.9.3-p327/gems/actionpack-3.2.11/lib/action_view/helpers/capture_helper.rb:187:in `with_output_buffer'
...
メソッド_app_views_home_index_html_erb___2383790952439350653_70222507697420
は、によって実行時に生成されましたActionView
。
.erb
つまり、これらのテンプレートを MVC のビュー オブジェクトと考えることができます。レンダリング プロセスを支援するヘルパー メソッドが定義されている場合、それらもビュー レイヤーの一部です。