test
アプリケーションを生成できるようにすることで、最後のステップを終了しました。これに基づいて、フレームワークの機能に精通し始めます。 既に述べたように、RoRアプリケーションは厳密に定義された構造を持っています。そのフォルダーが何のためにあるのか見てみましょう。
- app : アプリケーションの動的な部分
controllers
:インターフェースとビジネスロジック
helpers
:サポートコードをhelpers
models
:オブジェクトデータベースに関連し、アプリケーションで使用されるオブジェクトモデル
views
:リモートユーザーに送信するテンプレート
layouts
:ページレイアウトファイル - config :環境、データベース、およびアプリケーションの設定
環境:環境に関連する構成
initializers
:サーバーの起動時に処理される構成ファイル - db :アクティブレコード移行データベーススキーマ
- doc :Webアプリケーションのドキュメント
- lib :アプリケーションに関連するRubyライブラリ
- log : ログファイル
- public :アプリケーションの静的な部分
stylesheets
:CSSファイル
javascripts
:JavaScriptファイル
images
:画像ファイル - script :RoRプロジェクトを管理するためのシェルスクリプト
- test :アプリケーションをテストするためのコードとデータ
fixtures
:テスト中にデータベースにロードされたデータ
functional
:コントローラーをチェックするための機能テスト
integration
:統合テスト
unit
:モデルをチェックするための単体テスト - tmp :ここにRaisは一時データを保存します
- ベンダー :アプリケーションが使用する外部ライブラリ
プラグイン: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
機能する-命名規則の魔法。
エピローグ
コントローラーとビューの相互作用を表面的に調べ、それがどのように機能し、なぜ機能するのかを学び、ビューとコントローラーの間でロジックを共有することを学びました。 このトピックをさらに掘り下げます。多くの興味深い重要な詳細がありますが、少し後で説明します。 コメントは大歓迎です!