web-dev-qa-db-ja.com

Ruby on Rails基本概念

Railsを初めて使用するため、RailsでRubyの概要を示すWebサイトやリファレンスを見つけるのに苦労しています。MVC、ActiveRecord、およびそのようなものを基本的に理解していますレベルですが、いくつかの関係と基本を理解するのに苦労しています。例:

  1. 知っておく必要のあるすべての命名規則は何ですか?
  2. コントローラのアクションはどのように構造化して名前を付ける必要がありますか?
  3. ビューに情報をレンダリングするための最良の方法は何ですか(:content_forまたはrenderを部分的に)、使用してはいけない方法は何ですか?
  4. ヘルパーに何を入れ、何を入れないのですか?
  5. よくある落とし穴や、最初から正しく行う必要があることは何ですか?
  6. コードをモジュール化するにはどうすればよいですか?それがlibフォルダの目的ですか?

私はこの質問に関してStackOverflowでいくつかの回答を読みましたが、それらはすべて、読む必要のある300ページ以上の本を指しているだけですが、重要なことの簡潔な要約が必要です。

私がすでに知っているいくつかのリソースですが、新しいユーザーのための基本的な概念の簡潔な要約を提供していません。

あなたが提供できる助け、参照、またはガイダンスをありがとう!

P.S. I would like this wiki to become a living document, so please add to it, edit it, etc. as you feel necessary.

38
iwasrobbed

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は収集アクションになります。

上記のチュートリアルでは、これらのアイデアをルートファイルに実際に実装する方法について説明しています。

。ビューに情報をレンダリングする(: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。ヘルパーに何を入れ、何を入れないか?

テンプレートには、basic分岐ロジックのみが含まれている必要があります。もっと激しいことをする必要があるなら、それはヘルパーにあるべきです。ビュー内のローカル変数は、世界で善良で正しいものすべてに対する忌まわしきものであるため、それはあなたがヘルパーを作るべきであるという素晴らしい兆候です。

もう1つの理由は、純粋なコードの再利用です。わずかな変化だけで同じことを何度も繰り返している場合は、それをヘルパーに引き込みます(まったく同じことである場合は、部分的に行う必要があります)。

5。よくある落とし穴や、最初から正しく行う必要があることは何ですか?

パーシャルは決してインスタンス(@)変数を直接参照しないでください。これにより、将来の再利用が妨げられます。常に:locals => { :var_name => value }パラメータを介してレンダリング関数にデータを渡します。

ビューのレンダリングに直接関係しないロジックをビューに含めないでください。ビューで何かを実行するオプションがあり、それを別の場所で実行する場合は、10回のうち9回、他の場所で実行する方が適切です。

Railsは、「ファットモデル、スキニーコントローラー」というマントラがあります。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
68
Matt Briggs

私は少し前にいくつかの命名規則を書きました:

Railsの規則

一般

すべてのファイル名は同じ規則に従ってsnake_caseにあります-モデル:単数形(例:Restaurant)-コントローラー:複数形(例:RestaurantsController)-DB内のテーブル:plural(eg restaurants)-URL:all in plural(eg _/restaurants_、_/restaurants/:id_、_/restaurants/new_)

_Rails generate_コマンド

  • モデルの作成:単数(モデルの名前が単数であるため)。例えば_Rails g model_ Restaurant _name:string rating:integer_
  • 移行を作成します:複数形(テーブルの名前を使用するため)。例えば_Rails g migration AddDescriptionTo_Restaurants _description:text_
  • コントローラを作成します:複数形例: _Rails g controller_ Restaurants _index show_

モデル(単数)

ActiveRecordメソッド

すべてのActiveRecordのメソッドがモデルにリンクされているため、すべてが特異です。例:-_Restaurant.all_ --Restaurant.create(name: "Burger King", rating: 2) --Restaurant.find(params[:id])

協会

  • Singular _belongs_to_内。 one要素に属しているため。
  • 複数形 _has_many_内。 many要素があるからです。

例えば.

_class Restaurant < ActiveRecord::Base
  has_many :reviews
end

class Review < ActiveRecord::Base
  belongs_to :restaurant
end
_

ルート

リソース

複数リソースのルートを定義する場合:

_resources :restaurants
_

ルートヘルパー

  • index複数形(要素のリストを表示しているため)。例えば_restaurants_path_。 createにも使用できます。
  • show単数(1つの要素のみを表示しています括弧内の要素が必要です)。例えばrestaurant_path(@restaurant)updatedeleteにも使用できます。
  • new単数。例えば_new_restaurant_path_
3
Daniel Garcia