Ruby on Railsを一歩ずつ。 #3コントローラーとビュー

そのため、RoRが最初のtestアプリケーションを生成できるようにすることで、最後のステップを終了しました。これに基づいて、フレームワークの機能に精通し始めます。 既に述べたように、RoRアプリケーションは厳密に定義された構造を持っています。そのフォルダーが何のためにあるのか見てみましょう。


“Hello World”は、YPまたはエンジンがどのように機能するかの例として良い伝統となっています。 さて、私たちを歓迎するページを作りましょう。 RoRアプリケーションは、View、Controller、およびModelの3つのコンポーネントで構成される必要があることを知っています。 こんにちはと言うのは簡単です。HTMLコードをブラウザに渡すだけです。 HTMLをビューに含めるべきだと推測するのは簡単ですが、RoRでは、ビューをコントローラーに直接関連付ける必要があるため、ビューを直接作成することはできません。 RoRで何かを生成するには、コマンドラインに移動し(これを行う方法は既に知っています)、アプリケーションフォルダーに移動する必要があります。 ここでもコマンド:
ruby script/generate controller Hi index

script/generateは、Rubyで記述されたscriptフォルダーに生成されるシェルスクリプトです。したがって、インタープリターを介してスクリプトを実行する必要があります(このため、コマンドの先頭にrubyを追加しました)。 また、2つの引数をスクリプトに渡しました。 controllerは、コントローラーコードを生成する必要があると判断します。この場合、 Hiと呼ばれます。これは2番目の引数です。 そして、コマンドの最後のindexは、View indexをコントローラーにアタッチします。実際、これは必要なものでした。 ミュートを待機します。スクリプトは次のようになります。
exists app/controllers/<br>exists app/helpers/<br>create app/views/hi<br>exists test/functional/<br>create app/controllers/hi_controller.rb<br>create test/functional/hi_controller_test.rb<br>create app/helpers/hi_helper.rb<br>create app/views/hi/index.html.erb

exists始まる行は、ジェネレーターが作成したかったフォルダーとファイルを示していますが、それらは既にそこにありました。 フォルダー構造を知っていれば、作成されたものを言うことができます:ビューのhiフォルダー、コントローラー、テストを作成するためのテンプレート、ヘルパー、Viewファイルindex.html.erb.html.erb形式はHTMLとRubyコードの組み合わせです)。

これで、アプリケーションでindex利用可能になりました。 サーバーを起動してhttp//127.0.0.1haps000/hi/を見てみましょう:

画像

大したことではありませんが、ページはファイルがapp/views/hi/index.html.erbことを教えてくれます。 開くと、コードには基本的なHTML構造さえないことがわかります。 小さなファイルを追加して、より適切な形式にしましょう。
< html >
<
head >< title > Hi Habrahabr! </ title ></ head >
<
body >
<
h1 > Hello! </ h1 >
<
p > app/views/hi/index.html.erb </ p >
</
body >
</
html >

ファイルを保存してページを更新します。

画像

おそらく、これらの多くのフォルダーのすべての世代は、通常のHTMLページを作成するのに十分に疑わしく見えます。 RoRのパワーを使い始めるために、Controller app/controllers/hi_controller.rbを操作しましょう。 含まれるものは次のとおりです。
class HiController < ApplicationController
def index
end

end

既にRubyを知っているので、コードは私たちを怖がらせません: HiControllerクラスがHiController (クラス名はControllerの名前に基づいて生成されたことに注意してくださいHiControllerであり、理由と理由は引き続き説明します)、これはApplicationControllerクラスと空のindexメソッドの子孫です。 メソッドを空想してみましょう。変数を設定して、ビューに表示します。 これを行うために、RoRはインスタンス変数( @で始まるもの)を使用します。
class HiController < ApplicationController
def index
@habr = 'Habrahabr'
@message = ' '
end
end

したがって、ビューを編集して変数を表示します。
< html >
<
head >< title > Hi <%= @habr %>! </ title ></ head >
<
body >
<
h1 > Hello! </ h1 >
<
p > app/views/hi/index.html.erb </ p >
<
p > <%= @message %> </ p >
</
body >
</
html >

そして、ここでは、RubyコードがHTMLにどのように埋め込まれているかを確認します。 変数の値をHTMLコードで出力するには、タグ<%= … %>を使用します。これは、いわゆる式です。

Rubyで現在の時刻を取得するには、 Time.nowメソッドを使用します。 HTMLに<%= Time.now %>を挿入するだけで十分ですが、MVCを利用してコントローラーで計算を行う必要があります。 Controllerで時間を「カウント」して、Viewページに表示してみてください。

ビデオのロジック


また、Viewファイルにいくつかのロジックを追加することもできます。たとえば、リストを作成するために、イテレーターを使用できます。 @message変数をパラグラフで5回出力するとします。 純粋なRubyでこれを行う方法を知っています。
5. times do
puts "<p> #{@message} </p>" # ,
end

.erb形式のコードをやり直すだけで、少し簡単になります。
<% 5.times do %>
< p > <%= @message %> </ p >
<% end %>
putsはタグ<%= … %> puts置き換えました。 また、コードの出力が不要な場合は、タグの=を省略します。 それは私たちが得たものです

画像

どのように機能しますか?



コードが実行されると、RoRはリクエストを解釈します 127.0.0.1:3000/hi/ 127.0.0.1:3000/hi/ Hi Controller呼び出しとして。 RoRには、リクエストルーティングルールの編集可能なリストがあります。デフォルトでは、リクエストの最初の部分はコントローラーの名前、2番目はコントローラーのメソッドです。 繰り返しますが、 indexメソッドはデフォルトで呼び出されるため、リクエストでメソッドを指定しませんでした。 このメソッドは、必要なベース変数を決定します。 これにより、コントローラーの作業が完了し、RoRがデータをビューに転送します。 転送するデータの種類をどのように知るのですか conventions機能する-命名規則の魔法。

エピローグ


コントローラーとビューの相互作用を表面的に調べ、それがどのように機能し、なぜ機能するのかを学び、ビューとコントローラーの間でロジックを共有することを学びました。 このトピックをさらに掘り下げます。多くの興味深い重要な詳細がありますが、少し後で説明します。 コメントは大歓迎です!

Source: https://habr.com/ru/post/J50625/


All Articles