1.知っておく必要のあるすべての命名規則は何ですか?
dbテーブルは複数形、モデルは単数形、コントローラーは複数形です。したがって、テーブルにUser
裏打ちされ、。から見えるモデルがあります。users
UsersController
ファイルには、クラス名のワイドケースバージョンとして名前を付ける必要があります。したがって、FooBar
クラスは。というファイルに含まれている必要がありますfoo_bar.rb
。モジュールで名前空間を使用している場合、名前空間はフォルダーで表す必要があります。したがって、クラスについて話している場合はFoo::Bar
、にあるはずですfoo/bar.rb
。
2.コントローラーのアクションはどのように構成され、名前が付けられる必要がありますか?
コントローラのアクションはRESTfulである必要があります。つまり、コントローラーは、RPCを有効にするだけでなく、リソースを公開するものと考える必要があります。Railsには、リソースのメンバーアクションとコレクションアクションの概念があります。メンバーアクションは、特定のインスタンスで動作するものです。たとえば、/users/1/edit
ユーザーのメンバー編集アクションです。収集アクションは、すべてのリソースで機能するものです。したがって/users/search?name=foo
、収集アクションになります。
上記のチュートリアルでは、これらのアイデアをルートファイルに実際に実装する方法について説明しています。
3.ビューで情報を(部分的にまたは部分的にレンダリングするために)レンダリングするための最良の方法は何:content_for
ですか?また、使用してはいけない方法は何ですか?
content_for
内側のテンプレートから外側のテンプレートにhtmlを追加できるようにする場合、たとえば、ビューテンプレートからレイアウトテンプレートに何かを追加できるようにする場合に使用する必要があります。良い例は、ページ固有のjavascriptを追加することです。
# app/views/layout/application.rb
<html>
<head>
<%= yield :head %>
...
# app/views/foobars/index.html.erb
<% content_for :head do %>
<script type='text/javascript'>
alert('zomg content_for!');
</script>
<% end %>
パーシャルは、大きなファイルを分割するため、または同じビットの情報を複数回レンダリングするためのものです。例えば
<table>
<%= render :partial => 'foo_row', :collection => @foobars %>
</table>
# _foo_row.html.erb
<tr>
<td>
<%= foobar.name %>
</td>
</tr>
4.ヘルパーに何を入れ、何を入れてはいけないのですか?
テンプレートには、基本的な分岐ロジックのみが含まれている必要があります。もっと激しいことをする必要があるなら、それはヘルパーにあるべきです。ビュー内のローカル変数は、世界で善良で正しいものすべてに対する忌まわしいものであるため、ヘルパーを作成する必要があることを示す大きな兆候です。
もう1つの理由は、純粋なコードの再利用です。わずかな変化だけで同じことを何度も繰り返している場合は、それをヘルパーに引き込みます(まったく同じことである場合は、部分的に行う必要があります)。
5.よくある落とし穴や、最初から正しく行う必要があることは何ですか?
パーシャルは、インスタンス(@)変数を直接参照しないでください。これにより、後で再利用できなくなります。常に:locals => { :var_name => value }
paramを介してrender関数にデータを渡します。
ビューのレンダリングに直接関係しないロジックをビューに含めないでください。ビューで何かを実行するオプションがあり、それを別の場所で実行する場合は、10回のうち9回、他の場所で実行する方が適切です。
レールには「ファットモデル、スキニーコントローラー」というマントラがあります。1つの理由は、モデルがオブジェクト指向であり、コントローラーが本質的に手続き型であるということです。もう1つは、モデルはコントローラーをクロスできますが、コントローラーはモデルをクロスできないことです。3つ目は、モデルの妥当性が高いことです。それはちょうど良い考えです。
6.コードをモジュール化するにはどうすればよいですか?それがlibフォルダーの目的ですか?
libフォルダーは、モデルの懸念を超えるコード用です(つまり、モデルではないが、複数のモデルで使用されるもの)。そこに何かを入れる必要があるとき、それを入れるモデルを理解することができないので、あなたは知っているでしょう。それが起こるまで、あなたはただlibを無視することができます。
覚えておくべきことは、rails 3の時点では、libは自動ロードパス上にないということです。つまりrequire
、そこに入れる(または追加する)ものは何でも必要です。
lib
ディレクトリ内のすべてのモジュールを自動的に要求する方法:
#config/initializers/requires.rb
Dir[File.join(Rails.root, 'lib', '*.rb')].each do |f|
require f
end