2

申し訳ありませんが、これは理解できたと思いましたが、routes.rbの理解を再評価する必要があります。あなたが助けることができることを願っています。

ブラウザのリクエストがアプリケーションコントローラに送信され、コントローラが何を表示するかを指示します。-どのerbファイル、データベースのもの、何でも...

私のroutes.rbファイルには次のものがあります。

 root :to => 'static_pages#FAQ'

最近まで、何が起こっているのかと思っていました。routes.rbはstatic_pages_controller.rbファイルを調べ、FAQメソッドを調べてから、何をすべきかを調べています。FAQメソッドに何もない場合(ケースのように)、Railsはその魔法を実行し、私のビューのFAQ.html.erbに移動します。これは最も近いものです。

しかし、私が名前を変更したとしても:

def FAQ
end

コントローラで、またはstatic_pages_controller.rbを完全に削除しても、FAQ.html.erbファイルに移動します。では、routes.rbはコントローラーを見ていませんか?「表示」ファイルに直接移動しますか?助けてくれてありがとう。

4

3 に答える 3

0

静的ページが最初に提供されるため、FAQ.html.erb が常に提供されます。

また、「ブラウザのリクエストはアプリケーションコントローラーに送られ、コントローラーは何を表示するかを指示しますよね?-どのerbファイル、データベースのもの、何でも...」

私はそれを次のように考えています: リクエストは最初にルーティングを通過し、次に問題のリソースのコントローラーに送られます。コントローラーは application_controller から継承され、必要に応じてモデルを照会し、必要に応じて変数を計算し、それをコンパイルで使用します。コンパイルされたビュー ページは、HTML として送信されます。

于 2013-03-18T00:22:37.363 に答える
0

あなたの考えは本質的に正しいです。アクションによってビュー (または他の出力) が明示的にレンダリングされない場合、Rails は "FAQ" ビューを暗黙的にレンダリングする static_page のコントローラーの FAQ メソッドをレンダリングしようとします。

あなたが見逃しているのは、コントローラー/アクションのいずれかが欠落している場合、Rails が空白を埋めるということです。ビューを定義するだけで、Rails は空のアクションを定義する必要がないと見なします。

于 2013-03-18T00:23:11.787 に答える
0

メソッド名を大文字で始めることは、Ruby では非常に悪い考えのように思えます。なぜなら、Ruby は大文字で始まるすべての識別子を定数として扱うからです。私が個人的に最初に行うことは、ルートとコントローラー コードで「FAQ」を「faq」に変更することです。ブラウザの URL で「FAQ」を大文字にしたい場合は、おそらく次のような方法で実現できます。

root :to => static_pages#faq, :as => 'FAQ'

メソッドが呼び出されていることを確認するには、ロガーを使用します。

def faq
   Rails.logger.warn "faq method did get called after all"
end
于 2013-03-18T02:59:44.690 に答える