3

プログラミングは初めてですが、私はいくつかの素晴らしいことを成し遂げました。しかし、私の非伝統的なアプローチを考えると、私は時々、多くの仮定を含む「従来の」教えに不満を感じ、混乱することがあります。

だから私はレールを学び、その構造が好きですが、いくつかの用語は私を混乱させ、私はそれを理解しようとしましたが、頭を包むことができません。多くの人が私にレイアウトとレンダリングに関するRailsGuidesを参照し続けていますが、私はそれを完全には理解しておらず、全体的なレール構造のより広いコンテキストが欠けていると思います。

それで、全体的なプロセスと用語を説明するRailsの説明サイト/ドキュメント/ビデオ/ブック、より具体的には、Railsの処理と比較して、レイアウト、レンダリング、パーシャル、およびビューがどのように機能するかを説明するものを知っていますか?

詳細:

用語を相互に関連して理解しようとすると、用語が混乱します。たとえば、PJAX RailsCastを例にとると、Batesは、レイアウトとテンプレートの違いであることを明示的に示しています。このSOの質問を介してこれを達成しようとしているので、ファイルの従来の構造と名前付け、およびそれらの機能(すべての人ではなく、名前付けで過負荷になっているように見えるものだけ)に迷いました。

たとえば、applicaiton.html.erb内のファイルを取り上げますviews/layouts。そのファイルパスの場所は、それが「レイアウト」であることを示していますが_navigation.html.erb、すべてのページがこれらを共有しているため、これらも同じレベルにありますが_left.html.erb、 これらには先行する_underscoresがあります。ファイル名に含まれているため、Railsはこれらが「部分的」であることを認識しますが、フォルダー内およびフォルダー内にもあります。それで、それはどのような名前で通っていますか? _right.html.erbviews/layoutsapplication.html.erbviewslayout

上記の問題により、ファイルを適切に構造化していない可能性があるため、誰かが何について話しているのか理解できなくなります。スコープの問題(私の知る限り、電話をかけるなどの場合render 'action'render 'file'レールは別のコントローラーのビューとアクションを見つけることができます)は、rendervs content_for/の使用に影響しyieldます。ここでの私のSOの質問を見てください。ジェフの回答で、「他のビューからの歩留まりを使用することはできませんか?」と尋ねたときの彼のコメントで、彼の答えは「それは確かに意図ではありません」でした。

ですから、元の質問に戻ると、これらは互いに関連しているので説明されているとは思いません。堅牢なアプリケーションを作成することに興味があり、他の小さなフレームワークでどのように実現できるかを理解していますが、レイアウト、パーシャル、テンプレート、およびビュー、およびそれに応じてファイルを構造化する方法。

また、それらを説明する用語の図または説明、ならびに他の(使用法、他の親/子)および従来の配置との関係もお願いします。これは次のようになります。

A view is what is presented to the user.   It is comprised of several parts.
  The following are required [ templates, layouts ].  
  These are not required, but very likely once you have a robust and
   flexible program [ partials, yields/content_for ].   

A layout is a framework ....

A Partial is content, but only "partial" of a page....

A rendered file is ... and is located in each model's view
4

1 に答える 1

6

わかりました...これが私の見解です...「XはYです」と言うとき、私が本当に意味するのは、「Railsが物事を行うのが好きな方法と一致し続けることはXがYである」ということです。 「..違反する可能性はありますが、ほとんどの人は違反しません...また、コントローラーで呼び出されたときに「レンダリング」がどのように機能するかについては、これには触れていません。それはまったく別のワックスのボールです。

  • アプリ/ビューのすべてが「ビュー」です。「ビュー」とは、最終的にコンパイル/レンダリングされ、クライアント(ブラウザー、サードパーティのAPIなど)に表示されるものです。

  • アンダースコアで始まるファイルはすべて部分的です。アプリ/ビューのどこにあるかは関係ありません...それは部分的です。

  • [その他の]ファイルはどれも正直なところ、良さの見方です。HTML、XML、JSON、PDFなどですが、ビューです。

  • アンダースコアで始まらないapp/views / layouts内のファイルもビューですが、特別なものです。レイアウトです。レイアウトimhoは、すべてのビューに適用する一般的なマークアップの単なる「ラッパー」です。「自分のサイト用にプレミアムWebテンプレートをオンラインで購入した」という意味で使用すると、「テンプレート」のように考えることができますただし、「テンプレート」はRailsでも別の意味を持っています。したがって...これらのレイアウトファイルをテンプレートと見なさないようにしてください。それらを「レイアウト」と考えてください。

  • これらのレイアウトファイルがユニークなのは、どこかにへの呼び出しが含まれていること<%= yield %>です。Rubyのように、他の何かに制御を与え、結果に置き換えられます。Railsでは、これは、呼び出されたコントローラー/アクションの実際のビューの結果に線が置き換えられることを意味します(これについては後で詳しく説明します)。

  • レイアウトディレクトリにパーシャルを含めることはまったく問題ありません。私はいつもそれをします。私は2つの理由でそれをします。1つ目は、単にapplication.html.erbを使用したい場合です。この良い例として、私は通常、GoogleAnalyticsを設定するためのJS/ロジックを含むapp/ layouts/_google_analytics.html.erbファイルを持っています。これで、application.html.erbを呼び出すことができrender :partial => 'layouts/google_analytics'、何が起こっているのかは明らかですが、面倒ではありません。これを行うもう1つの理由は、複数のレイアウトがある場合です。おそらく私はmobile.html.erbを持っていますが、それでもGoogleAnalyticsが必要です。これで、それぞれに「共通レイアウトコード」を簡単に含めることができます。ドライです。

  • 他のファイルがどこに行くかについては...それらを意味のある場所に置いてください...それは通常かなり明白であり、より多くのアプリを構築するにつれてそれを感じるでしょう。Railsの魔法をもっと使うために採用できる命名規則がいくつかありますが、そうする必要はありません。たとえば、次のように呼び出すことができます。部分render @widgetsを検索し、_widget.html.erb@widgetsの要素ごとに1回レンダリングします。ただし、この方法で行う必要はありません。

  • 共有パーシャル?彼らはどこにでも行くことができます。本当にあなたが物事をどのように構成したいかに依存します。多くの人がアプリ/ビュー/共有を作成してそこに配置します。一部の人々は彼らの「主な」焦点を維持します。つまり...全体で使用されている_recent_blog_postsパーシャルがあるとします。あなたはそれをapp/views / shared/_recent_blog_posts.html.erbに置くことができます。app / views / blog / _recent_posts.html.erbに配置する必要があると主張することもできます(ファイル名のわずかな変更に注意してください)。どちらが正しいですか?言いにくい。

  • 歩留まりとcontent_for。デフォルトでは、Railsはビューマークアップをレイアウトに挿入するときにデフォルトでこれを行います。content_for :defaultビューを処理するときに、Railsが自動的に(またはそれに近い何かを)実行していると想定できyieldます。これが、レイアウトでビューを取得する方法です。ただし、明示的に行うこともできます。ユーザーがサイトのどこにいるかに応じて微調整したいWebサイトのセクション(右側など)があるとします。レイアウトファイルでは、次のようなことができます。

    ...いくつかの一般的な右側のもの...

次に、ビューファイルで次の操作を実行できます。

... my main view content...
<% content_for :right_side do %>
  ... specific right side content stuff...
<% end %>

そして、すべてがまとまると、Railsはその特定の右側のコンテンツをレイアウトの右側に配置します。

とにかく...それが役立つことを願っています。

于 2013-01-21T20:22:22.077 に答える