現在、Ruby on Rails を使用していくつかのアプリを作成していますが、理解できていない概念がいくつかあります。
これらの 1 つは、「ルーティング」プロセスがどのように機能するかということです。つまり、ユーザーが URL 文字列を入力すると、Rails はその URL に応じて関連するアセットを提供します。
これが私が起こっていると思うことです:
ユーザーは、ブラウザーを使用してサーバーを参照します。
http://0.0.0.0:3000
次に、URL の前に文字列を追加します。
http://0.0.0.0:3000/entries/view_all
Rails の「routes.rb」ファイルは、ディレクティブを介して文字列が実際に関連付けられるべきものを指定します。
match "/entries/view_all" => "entries#view_all"
上記のディレクティブは、文字列「/entries/view_all」が URL の先頭に追加された場合
view_all
、ファイル「entries_controller.rb」にあるメソッドを実行することを示しています。view_all
メソッドが実行されます。def view_all @entries = Entry.all(:order => 'created_at DESC') end
テーブル 'Entry' のすべてのエントリを定数
@entries
に降順で割り当てます。Rails は魔法のように「view_all.html.erb」をユーザーに提供することを認識します。
「view_all.html.erb」内の
each
ループは、「エントリ」テーブルからの関連情報を表示します。<% @entries.each do |entry| %> <h1><%= entry.title %></h1> <p><%= entry.content %></p> <p><em>Posted at <%= entry.created_at %></em></p> <% end %>
私の質問は次のとおりです。
- 物事がどのように機能するかについての私の概念はどれほど間違っていますか?
view_all
上記のステップ 3 で、Rails はメソッドが「entries_controller.rb」内にあることを実際にどのように認識しますか? ディレクティブはentries#view_all
ではなく でしentries#view_all
た。Rails は「controllers」ディレクトリ内のコントローラ ファイル名の先頭を自動的に一致させ、「_controller.rb」を無視しますか?- 上記のステップ 6 で、Rails は「view_all.html.erb」ビューを提供することを「魔法のように」どのように認識するのでしょうか? 質問 2 での動作と似ていますか? Rails は、ファイル名の「view_all」の部分を「entries_controller.rb」にあるメソッドの名前と一致させますか?
- object/constant
@entries
とそのすべてのメソッドは、「entries_controller.rb」から「view_all.html.erb」にどのように「渡される」のですか?